Java 8如何合并两个List

3

有两个列表vo类

class A {
    Integer aid;
    List<Integer> bIds;
    List<B> bList;
}

class B {
    Integer id;
    String Name;
}

List<A> aList; //size:3, bIds: {2,3}, {1,2}, {3}
List<B> bList; //id [{bId:1, ...},{bId:2, ...},{bId:3, ...},{bId:4, ...},{bId:5, ...}]

我想将B对象放入每个A对象的列表中。

如何使用Java Stream实现这一目标?

以下代码无效。

        aList.forEach(
                a -> {
                    a.setBList(
                            a.getBIds().stream()
                                .flatMap(id -> b.stream().filter(b -> b.getId() == id))
                                .collect(Collectors.toList())
                    );
                }
        );

期望的输出结果

//pre
aList = [ 
 {aid: 1, bIds: [2,3], bList:[]},
 {aid: 2, bIds: [1,2], bList:[]},
 {aid: 3, bIds: [3], bList:[]},

]

//after
aList = [ 
 {aid: 1, bIds: [2,3], bList:[{bId:2 ...},{bId:3 ...}]},
 {aid: 2, bIds: [1,2], bList:[{bId:1 ...},{bId:2 ...}]},
 {aid: 3, bIds: [3], bList:[{bId:2 ...}]},
]

1
你到目前为止尝试了什么?请展示一些代码。 - tostao
@EdgarHan 不要将代码片段放入注释中,而应将它们附加到问题中。 - Nikolai Shevchenko
1
@Nikolai Shevchenko 谢谢你,我编辑了我的帖子。 - EdgarHan
@EdgarHan 或许可以添加期望的输出。 - MK Tan
1个回答

3

试试这个:

Map<Integer, B> bMap = bList.stream()
                            .collect(toMap(B::getId, identity()));

aList.forEach(a -> a.setBList(a.getBIds()
                               .stream()
                               .map(bMap::get)
                               .collect(toList())));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接