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> |