我具有以下数据结构
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构造一个映射: 如果密钥(基于区域的“ Id”)是新的,则在地图中使用密钥和区域创建一个条目。 如果密钥是重复项,则将此重复区域的所有“部分”附加到现有区域的部分列表中。 最后,我应该有一个映射,其中区域的“ Id”作为键,区域作为值。
如何在Java8中使用流来做到这一点?
答案 0 :(得分:2)
您可以使用Collectors.toMap()
来创建一个新的Map
,以区域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;
}));