mirror of
https://gitee.com/chinabugotech/hutool.git
synced 2025-04-19 03:01:48 +08:00
!529 新增单参数CollectorUtil.groupingBy重载
Merge pull request !529 from 阿超/v5-dev
This commit is contained in:
commit
9b01a23a60
@ -8,12 +8,15 @@ import java.util.EnumSet;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.List;
|
||||
import java.util.StringJoiner;
|
||||
import java.util.function.BiConsumer;
|
||||
import java.util.function.BinaryOperator;
|
||||
import java.util.function.Function;
|
||||
import java.util.function.Supplier;
|
||||
import java.util.function.UnaryOperator;
|
||||
import java.util.stream.Collector;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 可变的汇聚操作{@link Collector} 相关工具封装
|
||||
@ -111,8 +114,7 @@ public class CollectorUtil {
|
||||
if (downstream.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH)) {
|
||||
return new SimpleCollector<>(mangledFactory, accumulator, merger, CH_ID);
|
||||
} else {
|
||||
@SuppressWarnings("unchecked")
|
||||
Function<A, A> downstreamFinisher = (Function<A, A>) downstream.finisher();
|
||||
UnaryOperator<A> downstreamFinisher = (UnaryOperator<A>) downstream.finisher();
|
||||
Function<Map<K, A>, M> finisher = intermediate -> {
|
||||
intermediate.replaceAll((k, v) -> downstreamFinisher.apply(v));
|
||||
@SuppressWarnings("unchecked")
|
||||
@ -140,6 +142,18 @@ public class CollectorUtil {
|
||||
return groupingBy(classifier, HashMap::new, downstream);
|
||||
}
|
||||
|
||||
/**
|
||||
* 提供对null值友好的groupingBy操作的{@link Collector}实现
|
||||
*
|
||||
* @param classifier 分组依据
|
||||
* @param <T> 实体类型
|
||||
* @param <K> 实体中的分组依据对应类型,也是Map中key的类型
|
||||
* @return {@link Collector}
|
||||
*/
|
||||
public static <T, K> Collector<T, ?, Map<K, List<T>>>
|
||||
groupingBy(Function<? super T, ? extends K> classifier) {
|
||||
return groupingBy(classifier, Collectors.toList());
|
||||
}
|
||||
|
||||
/**
|
||||
* 对null友好的 toMap 操作的 {@link Collector}实现,默认使用HashMap
|
||||
|
Loading…
x
Reference in New Issue
Block a user