微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用流将嵌套对象列表转换为具有相似信息的对象列表

如何解决如何使用流将嵌套对象列表转换为具有相似信息的对象列表

我有这个数据列表

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。