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

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