将 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
供应商,那怎么办?
groupingBy
,它采用了一个映射(map)供应器(supplier)。 - Tunaki