Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用流将嵌套对象列表转换为具有相似信息的对象列表_Java_Data Structures_Java Stream_Collectors - Fatal编程技术网

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])]