17、将Collectors.groupingBy实现为自定义收集器。你不需要提供下游收集器,所以实现最简单的变体即可。提示:你可以从 public class GroupingBy<T, K> implements Collector<T, Map<K, List<T>>, Map<K, List<T>>> 开始。
以下是实现 Collectors.groupingBy 作为自定义收集器的示例代码:
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collector;
public class GroupingBy<T, K> implements Collector<T, Map<K, List<T>>, Map<K, List<T>>> {
private final Function<? super T, ? extends K> classifier;
public GroupingBy(Function<? super T, ? extends K> classifier) {
this.classifier = classifier;
}
@Override
public Supplier<Map<K, List<T>>> supplier() {
return HashMap::new;
}
@Override
public BiConsumer<Map<K, List<T>>, T> accumulator() {
return (map, element) -> {
K key = classifier.apply(element);
map.computeIfAbsent(key, k -> new ArrayList<>()).add(element);
};
}
@Override
public BinaryOperator<Map<K, List<T>>> combiner() {
return (map1, map2) -> {
for (Map.Entry<K, List<T>> entry : map2.entrySet()) {
map1.computeIfAbsent(entry.getKey(), k -> new ArrayList<>()).addAll(entry.getValue());
}
return map1;
};
}
@Override
public Function<Map<K, List<T>>, Map<K, List<T>>> finisher() {
return Function.identity();
}
@Override
public Set<Characteristics> characteristics() {
return EnumSet.noneOf(Characteristics.class);
}
public static <T, K> GroupingBy<T, K> groupingBy(Function<? super T, ? extends K&g

最低0.47元/天 解锁文章
1085

被折叠的 条评论
为什么被折叠?



