【发布时间】:2020-08-27 03:52:42
【问题描述】:
我有一个对象如下
public class Model {
private String key;
private String data1;
private String data2;
private String data3;
// getters
}
这些模型的列表正在通过数据层返回。
现在我想创建一个Map<String, List<Model>>,其键是Modelclass 中的“键”字段。
有多个具有不同数据值的重复“键”。
我有以下现有解决方案,但需要一种更简单更好的方法。没有广泛使用 Java 8,因此对大多数方法不太熟悉,并且我没有时间研究,因此需要尽快解决。
List<Model> models = modelRepo.getAllModels();
Set<String> keys = models.stream().map(Model::getKey).collect(Collectors.toSet());
Map<String, List<Model>> result = new HashMap<>();
keys.stream().forEach(key -> {
List<Model> modelList = new ArrayList<>();
models.stream().forEach(model -> {
if (model.getKey().equals(key)) {
modelList.add(model);
}
});
result.put(key, modelList);
});
【问题讨论】:
-
你可能想要
groupingBy -
那行得通。非常感谢@user。
标签: java dictionary lambda java-8 java-stream