FizzBuzz/Java: Difference between revisions

Content added Content deleted
imported>Er2
(formatting)
imported>Er2
(Enum)
Line 180: Line 180:


=== Enum ===
=== Enum ===

With Functional and OO elements

<syntaxhighlight lang="java">
import java.util.Arrays;
import java.util.function.IntPredicate;
import java.util.stream.IntStream;

public enum FizzBuzz {
Fizz(divisibleBy(3)),
Buzz(divisibleBy(5));

private final IntPredicate test;

FizzBuzz(IntPredicate test) {
this.test = test;
}

static IntPredicate divisibleBy(int i) {
return n -> n % i == 0;
}

String applyRule( int n) {
if (test.test(n))
return name();
return "";
}

private static String print(int i) {
String byRules = Arrays.stream(FizzBuzz.values())
.map(rule -> rule.applyRule(i))
.reduce("", String::concat);
return byRules.isEmpty() ? String.valueOf(i) : byRules;
}

public static void main(String[] args) {
IntStream.rangeClosed(1, 100)
.mapToObj(FizzBuzz::print)
.forEach(System.out::println);
}
}

</syntaxhighlight>