相关疑难解决方法(0)

Collectors.groupingBy不接受null键

在Java 8中,这适用于:

Stream<Class> stream = Stream.of(ArrayList.class);
HashMap<Class, List<Class>> map = (HashMap)stream.collect(Collectors.groupingBy(Class::getSuperclass));
Run Code Online (Sandbox Code Playgroud)

但这不是:

Stream<Class> stream = Stream.of(List.class);
HashMap<Class, List<Class>> map = (HashMap)stream.collect(Collectors.groupingBy(Class::getSuperclass));
Run Code Online (Sandbox Code Playgroud)

Maps允许null键,List.class.getSuperclass()返回null.但Collectors.grouping可以在Collectors.java第907行发出NPE:

K key = Objects.requireNonNull(classifier.apply(t), "element cannot be mapped to a null key"); 
Run Code Online (Sandbox Code Playgroud)

如果我创建自己的收集器,它的工作原理改为:

K key = classifier.apply(t);  
Run Code Online (Sandbox Code Playgroud)

我的问题是:

1)Collectors的Javadoc.GroupingBy并没有说它不应该映射一个空键.出于某种原因这种行为是否必要?

2)是否有另一种更简单的方法来接受一个空键,而不必创建我自己的收集器?

java hashmap java-8 java-stream collectors

39
推荐指数
3
解决办法
2万
查看次数

标签 统计

collectors ×1

hashmap ×1

java ×1

java-8 ×1

java-stream ×1