FizzBuzz Solution Dumping Ground

In java, but in functional paradigm (don’t do this at work).

public static void main(String[] args) {
	final String result = IntStream
			.rangeClosed(1, 100)
			.mapToObj(Scratch::fizzBuzz)
			.collect(Collectors.joining(", "));

	System.out.print(result);
}

static String fizzBuzz(int n) {
	return buzz(n)
			.andThen(fizz(n))
			.apply(Function.identity())
			.apply(String.valueOf(n));
}

static Function<Function<String, String>, Function<String, String>> buzz(int n) {
	return test(n, 5, "buzz");
}

static Function<Function<String, String>, Function<String, String>> fizz(int n) {
	return test(n, 3, "fizz");
}

static Function<Function<String, String>, Function<String, String>> test(int number, int divisor, String match) {
	return f -> d -> test(number, divisor, match, f, d);
}

static String test(int number, int divisor, String match, Function<String, String> next, String defaultValue) {
	return number % divisor == 0
			? match + next.apply("")
			: next.apply(defaultValue);
}
2 Likes