java - 嵌套集合 lambda 迭代

标签 java lambda java-8

假设我有一个包含集合的对象,该集合中的每个元素都包含一个集合,每个集合又包含一个集合。

我想迭代最深的对象并对其应用相同的代码。

命令式方式很简单,但有没有办法让这一切都变成 lambda 式?

代码如下所示:

My object o;
SecretType computedThingy = 78;
for (FirstLevelOfCollection coll : o.getList()) {
  for (SecondLevelOfCollection colColl : coll.getSet()) {
    for (MyCoolTinyObjects mcto : colColl.getFoo()) {
      mcto.setSecretValue(computedThingy);
    }
  }
}

我可以看到如何从最深的循环中创建一个 lambda:

colColl.getFoo().stream().forEach(x -> x.setSecretValue(computedThingy)

但是我可以做更多吗?

最佳答案

flatMap可用于此目的。你在这里得到的是迭代各种最深集合的所有元素,就好像它们是一个集合:

o.getList().stream()
    .flatMap(c1 -> c1.getSet().stream())
    .flatMap(c2 -> c2.getFoo().stream())
    .forEach(x -> x.setSecretValue(computedThingy));

关于java - 嵌套集合 lambda 迭代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43981669/

相关文章:

java - 如何生成 HTML5 有效的 Javadoc?

java - 比较作为映射的键和值的集合的大小

java - 在 Java 中将函数应用于 while 循环

Java 8 重构 lambda 表达式

list - 迭代一个 optional 整数列表 ifPresent

java - 从 Mac 中删除 Java 8 JDK

java - 将 bean 包含到应用程序上下文中

java - 当我使用 Hibernate Config 进行反向工程时出现此错误 : -"java.sql.SQLException: No suitable driver found for".。我的数据库

java - 程序无法运行,Java、StringBuilder、Array

java - 如何使用 RestFB 获取评论的回复数