如何将嵌套的List <long>与java collector连接起来

时间:2015-08-27 14:57:24

标签: java lambda java-8

我希望在给定此嵌套结构的情况下检索不同的Longs列表:

Class A
public List<B> getBs()

Class B
public List<Long> getIds()


List<A> list = ...
// how do I now get all of longs as a distinct list

我意识到我可以做2个for循环,但是考虑到Java8的新功能,我只是习惯了,我确信有更好的方法。

为了澄清,我需要List<long>(不是List<A>

由于

1 个答案:

答案 0 :(得分:7)

下面的代码应该可以工作 - 你可以使用map进入嵌套结构,然后将“flatMap”列表中的id列入一个连接的Longs流,您可以在其上应用distinct中间操作。

List<A> list = ...;
List<Long> uniqueIds = list.stream()                 //Stream<A>
                           .map(A::getBs)            //Stream<List<B>>
                           .flatMap(List::stream)    //Stream<B>
                           .map(B::getIds)           //Stream<List<Long>>
                           .flatMap(List::stream)    //Stream<Long>
                           .distinct()
                           .collect(toList());