Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package fizzbuzz;
- import java.util.Arrays;
- import java.util.Collection;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Optional;
- import java.util.function.Function;
- import java.util.stream.IntStream;
- import java.util.stream.Stream;
- public class PairedFizzBuzz {
- static class Pair<L,R> {
- final L left;
- final R right;
- Pair(L left, R right) {
- this.left = left;
- this.right = right;
- }
- }
- public static void main(String[] args) {
- Function<Pair<Integer,Optional<String>>,Pair<Integer,Optional<String>>> id = (p) ->
- new Pair<>(p.left, p.right);
- Function<Pair<Integer,Optional<String>>,Pair<Integer,Optional<String>>> fizz = (p) ->
- new Pair<>(p.left, Optional.of(p.right.map(s -> s + "Fizz").orElse("Fizz")));
- Function<Pair<Integer,Optional<String>>,Pair<Integer,Optional<String>>> buzz = (p) ->
- new Pair<>(p.left, Optional.of(p.right.map(s -> s + "Buzz").orElse("Buzz")));
- List<Function<Pair<Integer, Optional<String>>, Pair<Integer, Optional<String>>>> fizzList =
- Arrays.asList(id, id, fizz);
- List<Function<Pair<Integer, Optional<String>>, Pair<Integer, Optional<String>>>> buzzList =
- Arrays.asList(id, id, id, id, buzz);
- Iterator<Function<Pair<Integer,Optional<String>>,Pair<Integer,Optional<String>>>> fizzes =
- Stream.generate(() -> fizzList)
- .flatMap(Collection::stream)
- .iterator();
- Iterator<Function<Pair<Integer,Optional<String>>,Pair<Integer,Optional<String>>>> buzzes =
- Stream.generate(() -> buzzList)
- .flatMap(Collection::stream)
- .iterator();
- IntStream.range(1, 1000)
- .mapToObj(num -> new Pair<>(num, Optional.<String>empty()))
- .map(p -> fizzes.next().apply(p))
- .map(p -> buzzes.next().apply(p))
- .map(p -> p.right.orElse(p.left.toString()))
- .limit(20)
- .forEach(System.out::println);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement