3 ms·
And the one in Java, less cool because neither cycle nor zip exist :( <T> Iterator<T> cycle(List<T> list) { return IntStream.iterate(0, x -> (x + 1)
by _old_dude_ 7y ago
And the one in Java, less cool because neither cycle nor zip exist :(
<T> Iterator<T> cycle(List<T> list) {
return IntStream.iterate(0, x -> (x + 1) % list.size()).mapToObj(list::get).iterator();
}
<T, U, V> Iterator<V> zip(Iterator<T> it1, Iterator<U> it2, BiFunction<T,U,V> merger) {
return Stream.generate(() -> merger.apply(it1.next(), it2.next())).iterator();
}
var fizz = cycle(List.of("Fizz", "", ""));
var buzz = cycle(List.of("Buzz", "", "", "", ""));
var ints = IntStream.iterate(0, x -> x + 1).boxed().iterator();
var fizzbuzz = zip(
zip(fizz, buzz, String::concat),
ints, (f, i) -> f.isEmpty()? "" + i: f);
Stream.generate(fizzbuzz::next).skip(1).limit(100)
.forEach(System.out::println);