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

标签 java lambda java-8 java-stream

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

我想从对象列表 A 中获取所有街道名称的列表。一级集合似乎从流中非常可行,但我如何使用一行代码获取嵌套字符串。

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

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

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

我找不到我正在寻找的准确示例。有人可以帮我解决这个问题吗?

最佳答案

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

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

第一个 map 将您的对象转换为 Address 对象,下一个 map 获取那些 Address 对象并进行转换它们变成街道名称,然后由收集器收集。

流操作形成一个管道,因此在终端操作(在本例中为 collect 操作)之前,您可以根据需要进行任意数量的操作。

关于java - 如何在 Java 8 流上运行嵌套收集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40075305/

相关文章:

Java 8 无限流输出

java - 在 Java 8 中重用流

java - 根据 Object 的成员变量从值对 HashMap 进行排序

java - JDK8 lambda 过滤器从列表到其他列表

java - 如何实现 dao 来获取列表而不使用 createCriteria() 并获取具有以下属性的列表?

c# - 在表达式树中获取 ParameterExpression 的运行时值

java - Java 流阶段是顺序的吗?

java - java 8 中 anyMatch 和 findAny 的区别

java - OSGi 菲利克斯 : Sharing a class between the host application and a bundle possible?

java - 如何在 Eclipse Java 动态 Web 项目中使用 .properties 文件?