Легко преобразовать List<V>
в Map<K, List<V>>
. Например:
public Map<Integer, List<String>> getMap(List<String> strings) {
return
strings.stream()
.collect(Collectors.groupingBy(String::length));
}
Но я хочу сделать это со своими List
и Map
поставщиками.
Я придумал это:
public Map<Integer, List<String>> getMap(List<String> strings) {
return strings.stream()
.collect(Collectors.toMap(
String::length,
item -> {List<String> list = new ArrayList<>(); list.add(item); return list;},
(list1, list2) -> {list1.addAll(list2); return list1;},
HashMap::new));
}
Вопрос: Есть ли более простой, менее подробный или более эффективный способ сделать это? Например, что-то вроде этого (что не работает):
return strings.stream()
.collect(Collectors.toMap(
String::length,
ArrayList::new,
HashMap::new));
И что, если мне нужно только определить поставщика List
, но не поставщика Map
?