我有一个对象如下
public class Model {
private String key;
private String data1;
private String data2;
private String data3;
// getters
}
这些模型的列表正在通过数据层返回。
现在我想创建一个
Map<String, List<Model>>
键是 Model
中的“键”字段类(class)。有多个具有不同数据值的重复“键”。
我有以下现有解决方案,但需要更简单更好的方法。没有广泛使用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);
});
最佳答案
首先,stream().forEach()
可以换成forEach()
只要不使用中间操作。
您想要的是 Collectors.groupingBy
的典型用例没有进一步的下游收集器:
Map<String, List<Model>> result = models.stream() // Stream<Model>
.collect(Collectors.groupingBy(Model::getKey)); // Map<String, List<Model>>
关于java - 从 List<Object> 获取 Map<String, List<Object>> 其中键是对象的字段之一,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61732540/