package org.leumasjaffe.recipe.util; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.stream.Stream; import lombok.experimental.UtilityClass; @UtilityClass public class Collator { public Collection collateBy(final Stream stream, final Function getKey, final BinaryOperator folder) { final Map map = new HashMap<>(); stream.forEach(value -> { final String key = getKey.apply(value); map.computeIfPresent(key, (k, v) -> folder.apply(v, value)); map.computeIfAbsent(key, k -> value); }); return map.values(); } }