如何使用流将嵌套对象列表转换为具有相似信息的对象列表
How to convert list of nested object to list of objects with similar informations using streams
我有这个数据列表
List<Status> statuses = [
{
id: 123
mainSatus: HA
MoreInfo: {
name: max
status: MM
}
},
{
id: 456
mainSatus: HA
MoreInfo: {
name: max
status: KK
}
},
{
id: 777
mainSatus: OU
MoreInfo: {
name: max
status: KK
}
}
];
我想要这样的输出
List<SimilarInfo> similarinfos = [{mainStatus:HA, statueses:[MM,KK]} , {mainStatus:OU, statuses:[KK]}];
因此按具有相应状态的 mainStatus 分组。
您可以执行以下操作:
List<Status> statuses = Arrays.asList(
new Status(123, "HA", new MoreInfo("max", "MM")),
new Status(456, "HA", new MoreInfo("max", "KK")),
new Status(777, "OU", new MoreInfo("max", "KK"))
);
Map<String, List<String>> mainStatusToStatuses = statuses.stream()
.collect(Collectors.groupingBy(Status::getMainStatus,
Collectors.mapping(status -> status.getMoreInfo().getStatus(), Collectors.toList())));
System.out.println(mainStatusToStatuses);
输出:
{OU=[KK], HA=[MM, KK]}
如果您对地图不满意,可以从这里开始:
List<SimilarInfo> similarInfos = mainStatusToStatuses.entrySet().stream()
.map(entry -> new SimilarInfo(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
System.out.println(similarInfos);
输出:
[SimilarInfo(mainStatus=OU, statuses=[KK]), SimilarInfo(mainStatus=HA, statuses=[MM, KK])]
我有这个数据列表
List<Status> statuses = [
{
id: 123
mainSatus: HA
MoreInfo: {
name: max
status: MM
}
},
{
id: 456
mainSatus: HA
MoreInfo: {
name: max
status: KK
}
},
{
id: 777
mainSatus: OU
MoreInfo: {
name: max
status: KK
}
}
];
我想要这样的输出
List<SimilarInfo> similarinfos = [{mainStatus:HA, statueses:[MM,KK]} , {mainStatus:OU, statuses:[KK]}];
因此按具有相应状态的 mainStatus 分组。
您可以执行以下操作:
List<Status> statuses = Arrays.asList(
new Status(123, "HA", new MoreInfo("max", "MM")),
new Status(456, "HA", new MoreInfo("max", "KK")),
new Status(777, "OU", new MoreInfo("max", "KK"))
);
Map<String, List<String>> mainStatusToStatuses = statuses.stream()
.collect(Collectors.groupingBy(Status::getMainStatus,
Collectors.mapping(status -> status.getMoreInfo().getStatus(), Collectors.toList())));
System.out.println(mainStatusToStatuses);
输出:
{OU=[KK], HA=[MM, KK]}
如果您对地图不满意,可以从这里开始:
List<SimilarInfo> similarInfos = mainStatusToStatuses.entrySet().stream()
.map(entry -> new SimilarInfo(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
System.out.println(similarInfos);
输出:
[SimilarInfo(mainStatus=OU, statuses=[KK]), SimilarInfo(mainStatus=HA, statuses=[MM, KK])]