如何使用java收集器连接嵌套的List <Long>

Man*_*tel 4 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
Run Code Online (Sandbox Code Playgroud)

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

澄清一下,我要求List<long>(不是List<A>)

谢谢

ass*_*ias 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());
Run Code Online (Sandbox Code Playgroud)