Collectors.groupingBy不接受空键。

23 浏览
0 Comments

Collectors.groupingBy不接受空键。

在Java 8中,这样可以运行:

Stream stream = Stream.of(ArrayList.class);
HashMap> map = (HashMap)stream.collect(Collectors.groupingBy(Class::getSuperclass));

但是这样不行:

Stream stream = Stream.of(List.class);
HashMap> map = (HashMap)stream.collect(Collectors.groupingBy(Class::getSuperclass));

Map允许空键,而List.class.getSuperclass()返回null。但是Collectors.groupingBy会在Collectors.java的第907行抛出NPE:

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

如果我创建自己的收集器,将这一行改为:

K key = classifier.apply(t);  

它可以正常工作。

我的问题是:

1)Collectors.groupingBy的Javadoc没有说明它不应该映射空键。这种行为是否有必要?

2)是否有其他更简单的方法可以接受空键,而不需要创建自己的收集器?

0