Здесь находятся три решения.
Java 8 с Streams:
IntStream.rangeClosed(0, 100).mapToObj(
i -> i % 3 == 0 ?
(i % 5 == 0 ? "FizzBuzz" : "Fizz") :
(i % 5 == 0 ? "Buzz" : i))
.forEach(System.out::println);
Java 8 с Eclipse Collections:
IntInterval.zeroTo(100).collect(
i -> i % 3 == 0 ?
(i % 5 == 0 ? "FizzBuzz" : "Fizz") :
(i % 5 == 0 ? "Buzz" : i))
.each(System.out::println);
Java 8 с коллекциями Eclipse, используя Предикаты:
Interval.zeroTo(100).collect(
new CaseFunction<Integer, String>(Object::toString)
.addCase(i -> i % 15 == 0, e -> "FizzBuzz")
.addCase(i -> i % 3 == 0, e -> "Fizz")
.addCase(i -> i % 5 == 0, e -> "Buzz"))
.each(System.out::println);
Update:
Как Затмения Коллекции 8.0 release, функциональные интерфейсы в Eclipse, Collections в настоящее время расширяют эквивалентные функциональные интерфейсы в Java 8. Это означает, что CaseFunction
теперь может быть использован в качестве java.util.function.Function
, что означает, что он будет работать с Stream.map(Function)
. В следующем примере используется CaseFunction
с Stream<Integer>
:
IntStream.rangeClosed(0, 100).boxed().map(
new CaseFunction<Integer, String>(Object::toString)
.addCase(i -> i % 15 == 0, e -> "FizzBuzz")
.addCase(i -> i % 3 == 0, e -> "Fizz")
.addCase(i -> i % 5 == 0, e -> "Buzz"))
.forEach(System.out::println);
Update:
Как Затмения Коллекции 8.1 release, есть теперь поддержка примитивных функций дела. Теперь приведенный выше код можно записать следующим образом, удалив вызов boxed
. IntCaseFunction
реализует IntToObjectFunction
, который распространяется на java.util.function.IntFunction
.
IntStream.rangeClosed(0, 100).mapToObj(
new IntCaseFunction<>(Integer::toString)
.addCase(i -> i % 15 == 0, e -> "FizzBuzz")
.addCase(i -> i % 3 == 0, e -> "Fizz")
.addCase(i -> i % 5 == 0, e -> "Buzz"))
.forEach(System.out::println);
IntCaseFunction
будет также работать с IntInterval
например, передается в качестве параметра методу collect
.
Примечание: Я коммиттер для Eclipse Collections.
https://gist.github.com/stuart-marks/9657079 –
@StuartMarks шляпы от вас! –