我喜欢将下面的代码转换为 java 流,
HashMap<String, List<Data>> heMap = new HashMap<String, List<Data>>();
for (Data heData : obj) {
String id = heData.getData().getId() + heData.getPlanData().getCode()
+ heData.getPlanData().getId();
if (!heMap.containsKey(id)) {
CitizenHElist = new ArrayList<Data>();
CitizenHElist.add(heData);
heMap.put(id, CitizenHElist);
} else {
heMap.get(id).add(heData);
}
}
我使用流尝试了以下代码,但我没有成功。
heMap=obj.stream().collect(Collectors.toMap(t->getKey(t), obj.stream().collect(Collectors.toList())));
private String getKey(Data heData){
String id = heData.getData().getId() + heData.getPlanData().getCode()
+ heData.getPlanData().getId();
return id;
}
最佳答案
这是 groupingBy
收集器的工作:
import static java.util.stream.Collectors.groupingBy;
Map<String, List<Data>> heMap = obj.stream().collect(groupingBy(d -> getKey(d)));
请注意,这将使用
Map
和 List
的一些未指定的实现。目前,它恰好是 HashMap
和 ArrayList
,但将来可能会改变。
关于java - 在 Java 8 中使用 Collectors.toMap 使用 LIst 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36783629/