我有以下数据结构
public class Zones {
private List<Zone> zones;
}
public class Zone {
private int id;
private String name;
private List<Part> parts;
}
public class Part {
private int id;
private String name;
}
这是我的问题。我有一个 Zones 实例,比如 z。
我想流式传输 z 并执行以下操作: 使用以下条件从 z 构建 map : 如果 key (基于区域的“Id”)是新的,则使用 key 和区域在 map 中创建一个条目。 如果 key 重复,则将此重复区域的所有“部分”附加到现有区域的部分列表中。 最后,我应该有一个以区域的“Id”为键,以区域为值的 map 。
我如何在 Java8 中使用流来做到这一点?
最佳答案
您可以使用 Collectors.toMap()
, 制作一个新的 Map
以 zone id 为键,以 Zone 为值,如果有重复则取 List<Part>
从第二个区域并将其附加到第一个区域:
Map<Integer, Zone> map = z.getZones().stream()
.collect(Collectors.toMap(Zone::getId, Function.identity(),
(zone1, zone2) -> {
zone1.getParts().addAll(zone2.getParts());
return zone1;
}));
关于java-8 - Java 8 将列表转换为映射处理重复键和操作值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55331901/