我希望在给定此嵌套结构的情况下检索不同的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>
)
由于
答案 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());