Advertisement
Guest User

Untitled

a guest
May 28th, 2015
218
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.10 KB | None | 0 0
  1. package fizzbuzz;
  2.  
  3. import java.util.Arrays;
  4. import java.util.Collection;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Optional;
  8. import java.util.function.Function;
  9. import java.util.stream.IntStream;
  10. import java.util.stream.Stream;
  11.  
  12. public class PairedFizzBuzz {
  13. static class Pair<L,R> {
  14. final L left;
  15. final R right;
  16.  
  17. Pair(L left, R right) {
  18. this.left = left;
  19. this.right = right;
  20. }
  21. }
  22.  
  23. public static void main(String[] args) {
  24. Function<Pair<Integer,Optional<String>>,Pair<Integer,Optional<String>>> id = (p) ->
  25. new Pair<>(p.left, p.right);
  26.  
  27. Function<Pair<Integer,Optional<String>>,Pair<Integer,Optional<String>>> fizz = (p) ->
  28. new Pair<>(p.left, Optional.of(p.right.map(s -> s + "Fizz").orElse("Fizz")));
  29.  
  30. Function<Pair<Integer,Optional<String>>,Pair<Integer,Optional<String>>> buzz = (p) ->
  31. new Pair<>(p.left, Optional.of(p.right.map(s -> s + "Buzz").orElse("Buzz")));
  32.  
  33. List<Function<Pair<Integer, Optional<String>>, Pair<Integer, Optional<String>>>> fizzList =
  34. Arrays.asList(id, id, fizz);
  35. List<Function<Pair<Integer, Optional<String>>, Pair<Integer, Optional<String>>>> buzzList =
  36. Arrays.asList(id, id, id, id, buzz);
  37.  
  38. Iterator<Function<Pair<Integer,Optional<String>>,Pair<Integer,Optional<String>>>> fizzes =
  39. Stream.generate(() -> fizzList)
  40. .flatMap(Collection::stream)
  41. .iterator();
  42. Iterator<Function<Pair<Integer,Optional<String>>,Pair<Integer,Optional<String>>>> buzzes =
  43. Stream.generate(() -> buzzList)
  44. .flatMap(Collection::stream)
  45. .iterator();
  46.  
  47. IntStream.range(1, 1000)
  48. .mapToObj(num -> new Pair<>(num, Optional.<String>empty()))
  49. .map(p -> fizzes.next().apply(p))
  50. .map(p -> buzzes.next().apply(p))
  51. .map(p -> p.right.orElse(p.left.toString()))
  52. .limit(20)
  53. .forEach(System.out::println);
  54. }
  55. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement