Collator.java 735 B

123456789101112131415161718192021222324
  1. package org.leumasjaffe.recipe.util;
  2. import java.util.Collection;
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.function.BinaryOperator;
  6. import java.util.function.Function;
  7. import java.util.stream.Stream;
  8. import lombok.experimental.UtilityClass;
  9. @UtilityClass
  10. public class Collator {
  11. public <T> Collection<T> collateBy(final Stream<T> stream, final Function<T, String> getKey,
  12. final BinaryOperator<T> folder) {
  13. final Map<String, T> map = new HashMap<>();
  14. stream.forEach(value -> {
  15. final String key = getKey.apply(value);
  16. map.computeIfPresent(key, (k, v) -> folder.apply(v, value));
  17. map.computeIfAbsent(key, k -> value);
  18. });
  19. return map.values();
  20. }
  21. }