Java 如何使用流将嵌套对象列表转换为具有相似信息的对象列表
我有这个数据列表Java 如何使用流将嵌套对象列表转换为具有相似信息的对象列表,java,data-structures,java-stream,collectors,Java,Data Structures,Java Stream,Collectors,我有这个数据列表 List<Status> statuses = [ { id: 123 mainSatus: HA MoreInfo: { name: max status: MM } }, { id: 456 mainSatus: HA MoreInfo: { name: m
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
}
}
];
列表状态=[
{
身份证号码:123
主:哈
更多信息:{
姓名:马克斯
状态:MM
}
},
{
身份证号码:456
主:哈
更多信息:{
姓名:马克斯
状态:KK
}
},
{
身份证号码:777
mainSatus:OU
更多信息:{
姓名:马克斯
状态:KK
}
}
];
我想要这样的输出
List<SimilarInfo> similarinfos = [{mainStatus:HA, statueses:[MM,KK]} , {mainStatus:OU, statuses:[KK]}];
List similarinfos=[{mainStatus:HA,雕像:[MM,KK]},{mainStatus:OU,状态:[KK]}];
因此,按主状态和相应状态分组。您可以执行以下操作:
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);
如果您对地图不满意,可以从这里开始:
List<SimilarInfo> similarInfos = mainStatusToStatuses.entrySet().stream()
.map(entry -> new SimilarInfo(entry.getKey(), entry.getValue()))
.collect(Collectors.toList());
System.out.println(similarInfos);
请添加到目前为止您尝试过的代码,以帮助您更好地获得
状态的POJO
MoreInfo
SimilarInfo
?如果是这样的话,你能把它们添加到你的问题中吗?从这个问题中可以很清楚地看出哪些属性包括在内,我只需要分组them@AlexAlex这是JSON还是java对象?或者这对你来说无关紧要?请添加完整的代码或删除你的帖子。谢谢你能用一种方法发布吗?@AlexAlex好吧,我们可以把这两个流连接起来:`List similarInfos=Status.stream().collect(Collectors.groupingBy(Status::getMainStatus,Collectors.mapping(status->status.getMoreInfo().getStatus(),Collectors.toList())).entrySet().stream().map(entry->newsimilarinfo(entry.getKey(),entry.getValue()).collector(Collectors.toList())`
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])]