收集器.分组依据不接受空键
2022-08-31 15:22:13
在Java 8中,这是有效的:
Stream<Class> stream = Stream.of(ArrayList.class);
HashMap<Class, List<Class>> map = (HashMap)stream.collect(Collectors.groupingBy(Class::getSuperclass));
但事实并非如此:
Stream<Class> stream = Stream.of(List.class);
HashMap<Class, List<Class>> map = (HashMap)stream.collect(Collectors.groupingBy(Class::getSuperclass));
Maps 允许空键,List.class.getSuperclass() 返回 null。但是 Collectors.groupingBy 发出一个 NPE,位于 Collectors.java,第 907 行:
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)有没有另一种更简单的方法来接受空密钥,而不必创建我自己的收集器?