import reactor.fn.BiFunction; public class IterableReducer { private IterableReducer() { } public static <T> T reduce(Iterable<T> iterable, T initial, BiFunction<T, T, T> biFunction) { T result = initial; for (T each : iterable) { result = biFunction.apply(result, each); } return result; } public static <F,T> T reduce2(Iterable<F> iterable, T initial, BiFunction<T, F, T> biFunction) { T result = initial; for (F each : iterable) { result = biFunction.apply(result, each); } return result; } }