kotlin - 如何在Kotlin中替换长链的forEach {}语句?

标签 kotlin lambda foreach

我正在处理一种情况,我在 Activity 中收到一个通用对象,该对象与房间数据库中的其他对象有很多关系。我需要访问一个低级对象,并且必须使用forEach进行多次迭代,例如:

items.forEach{ item -> 
   item.categories.forEach{ category ->
      category.dataTypes.forEach{ dataType ->
         dataType.configValues.forEach{ value ->
            if (value) (...) 
         }
      }
   }
}

拥有这样的陈述链感觉很烦。它看起来像是错误的代码。有没有办法减少Kotlin的样板?

最佳答案

以前的平面映射怎么样?

items.flatMap { it.categories }
    .flatMap { it.dataTypes }
    .flatMap { it.configValues }
    .filter { ... your filter ... }
    .forEach { ... }

链实际上仍在那儿,但被弄平了。

关于kotlin - 如何在Kotlin中替换长链的forEach {}语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57920192/

相关文章:

scala - 为什么 Kotlin 的编译速度比 Scala 快?

java - 从 java 中的供应商枚举获取字符串值

python - 将列表元素转换为元组列表

java - 这个算法的时间复杂度是O(N^2)吗?

jsf - Primefaces dataScroller 具有子组件的动态 id

android - RunBlocking 与 Dispatcher 通信不起作用

java - 使用从 Kotlin 数据类生成的代码时出现 "Incompatible types"错误

Android:在另一个不发射的情况下收集 Kotlin Flow

c++ - Lambda 语法或 gcc 错误的最后一刻更改?

r - R中使用foreach时是否导入 "parallel"包