我有一个嵌套的对象列表。我试图做的是,我需要让它映射。
@Data
@AllArgsConstructor
@NoArgsConstructor
class ReelGroup {
List<Reel> reelWithGroup;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Reel {
String reelId;
List<Group> groups;
}
@Data
@AllArgsConstructor
@NoArgsConstructor
class Group {
String groupId;
String dueDate;
}
示例对象
Group g1 = new Group("G1", "1");
Group g2 = new Group("G2", "2");
Reel reel1 = new Reel("R1", Arrays.asList(g1, g2));
Group g3 = new Group("G1", "3");
Group g4 = new Group("G4", "4");
Reel reel2 = new Reel("R2", Arrays.asList(g3, g4));
ReelGroup reelGroup = new ReelGroup(Arrays.asList(reel1, reel2));
对象如下
[
{
reelId:"R1",
groups:[
{ groupId :"G1", dudeDate:"1"},
{ groupId :"G2", dudeDate:"2"}
]
},
{
reelId:"R2",
groups:[
{ groupId :"G1", dudeDate:"1"},
{ groupId :"G4", dudeDate:"3"}
]
}
]
预期结果,意味着使其成为 Map,
注意:在给定的对象中 ReelIds 不会重复,以及在特定卷轴中,groupIds 不会重复
{
R2={G1=3, G4=4},
R1={G1=1, G2=2}
}
我试过如下,
reelGroup.getReelWithGroup().stream()
.collect(
Collectors.groupingBy(
e -> e.getReelId(),
Collectors.collectingAndThen(
Collectors.toList(),
l ->
l.stream()
.collect(Collectors.toMap(m -> m.getGroupId(), m -> m.getDueDate())))));
但这不能编译。
你不需要跟 group as 一起去,你可以直接使用toMap()
.
Map<String, Map<String, String>> collect =
reelGroup.getReelWithGroup().stream()
.collect(
Collectors.toMap(
e -> e.getReelId(),
v ->
v.getGroups().stream()
.collect(
Collectors.toMap(
g -> g.getGroupId(),
g -> g.getDueDate(),
(existing, current) -> existing)),
(existing, current) -> existing));
您可以参考Java 文档。假设如果你得到重复(但你提到不会有任何重复),地图不能有重复,你可以使用合并函数作为第三个参数来决定你需要哪些对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句