【发布时间】:2017-04-07 23:11:33
【问题描述】:
将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过载了地图供应商。 -
流上有一个您可能感兴趣的三参数收集方法
标签: java java-stream collectors