| 1 | package com.pivovarit.gatherers; | |
| 2 | ||
| 3 | import java.util.HashMap; | |
| 4 | import java.util.Map; | |
| 5 | import java.util.Objects; | |
| 6 | import java.util.function.BiConsumer; | |
| 7 | import java.util.function.Function; | |
| 8 | import java.util.function.Supplier; | |
| 9 | import java.util.stream.Collector; | |
| 10 | import java.util.stream.Gatherer; | |
| 11 | import java.util.stream.Stream; | |
| 12 | ||
| 13 | record GroupingByGatherer<T, K, R>(Function<? super T, ? extends K> classifier, | |
| 14 | Collector<? super T, ?, ? extends R> collector) | |
| 15 | implements Gatherer<T, HashMap<K, Stream.Builder<T>>, Map.Entry<K, R>> { | |
| 16 | ||
| 17 | GroupingByGatherer { | |
| 18 | Objects.requireNonNull(classifier, "classifier can't be null"); | |
| 19 | Objects.requireNonNull(collector, "collector can't be null"); | |
| 20 | } | |
| 21 | ||
| 22 | @Override | |
| 23 | public Supplier<HashMap<K, Stream.Builder<T>>> initializer() { | |
| 24 |
1
1. initializer : replaced return value with null for com/pivovarit/gatherers/GroupingByGatherer::initializer → KILLED |
return HashMap::new; |
| 25 | } | |
| 26 | ||
| 27 | @Override | |
| 28 | public Integrator<HashMap<K, Stream.Builder<T>>, T, Map.Entry<K, R>> integrator() { | |
| 29 |
1
1. integrator : replaced return value with null for com/pivovarit/gatherers/GroupingByGatherer::integrator → KILLED |
return Integrator.ofGreedy((state, element, _) -> { |
| 30 |
2
1. lambda$integrator$0 : removed call to java/util/stream/Stream$Builder::accept → KILLED 2. lambda$integrator$1 : replaced return value with null for com/pivovarit/gatherers/GroupingByGatherer::lambda$integrator$1 → KILLED |
state.computeIfAbsent(classifier.apply(element), _ -> Stream.builder()).accept(element); |
| 31 |
1
1. lambda$integrator$0 : replaced boolean return with false for com/pivovarit/gatherers/GroupingByGatherer::lambda$integrator$0 → SURVIVED |
return true; |
| 32 | }); | |
| 33 | } | |
| 34 | ||
| 35 | @Override | |
| 36 | public BiConsumer<HashMap<K, Stream.Builder<T>>, Downstream<? super Map.Entry<K, R>>> finisher() { | |
| 37 |
2
1. lambda$finisher$0 : removed call to java/util/HashMap::forEach → KILLED 2. finisher : replaced return value with null for com/pivovarit/gatherers/GroupingByGatherer::finisher → KILLED |
return (map, downstream) -> map.forEach((key, builder) -> downstream.push(Map.entry(key, builder.build() |
| 38 | .collect(collector)))); | |
| 39 | } | |
| 40 | } | |
Mutations | ||
| 24 |
1.1 |
|
| 29 |
1.1 |
|
| 30 |
1.1 2.2 |
|
| 31 |
1.1 |
|
| 37 |
1.1 2.2 |