В 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));
Карты допускают нулевой ключ, а 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) Javadoc of Collectors.groupingBy не говорит, что он не должен отображать нулевой ключ. По какой-то причине это поведение необходимо?
2) Есть ли другой, более простой способ принять нулевой ключ, не создавая собственный коллекционер?