问题描述
我有这个数据列表
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,"KK")),new Status(777,"OU","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])]