如何在java 8流上运行嵌套收集

时间:2016-10-16 20:50:05

标签: java lambda java-8 java-stream

我有一个对象列表A,A有一个名为Address的属性,它有一个街道名称 - streetName

从对象列表中我想要获取所有街道名称的列表。一个级别的集合似乎可以从流中完成,但如何使用一行代码获得嵌套的String。

因此,为了从对象A获取地址列表,我可以这样做:

listOfObjectsA.stream().map(a::getAddress).collect(Collectors.toList());

我的最终目标是获取街道名称列表,因此我无法使用lambdas找出二级集合。

我无法找到我想要的精确示例。有人可以帮我这个。

1 个答案:

答案 0 :(得分:6)

您可以简单地链接另一个map操作以获取街道名称:

listOfObjectsA
.stream()
.map(a::getAddress)
.map(a -> a.getStreetName())  // or a::getStreetName
.collect(Collectors.toList());

第一个map将您的对象转换为Address个对象,下一个mapAddress个对象转换为street names,然后将其转换为collect收藏家。

流操作形成一个管道,因此您可以在终端操作之前拥有所需的操作(在本例中为m.redraw.strategy("all");操作)。