首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Kotlin flatMap -映射

Kotlin flatMap -映射
EN

Stack Overflow用户
提问于 2015-12-06 01:24:25
回答 2查看 8.8K关注 0票数 14

假设我有一个30k元素的列表,我想对列表中所有可能的对执行一个操作。所以我有:

代码语言:javascript
复制
 list.asSequence().flatMap { i -> 
         list.asSequence().map { j -> /* perform operation here */ }
 }

问题1:有什么可供选择的吗?(如应用函子)。

我还注意到,这个平台地图操作比命令式循环版本慢得多。(可能是因为关闭?)

代码语言:javascript
复制
for(i in list){
    for(j in list){

    }
}

问题2:是否有提高平台地图/地图版本性能的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-07 18:17:45

在回答问题2时,我们考虑添加flatMap重载,它不会为外部集合/序列中的每个元素创建闭包:https://youtrack.jetbrains.com/issue/KT-8602

但是,如果您想对每对执行一些副作用,而不是转换序列,我建议您坚持使用for-loops或内联的forEach lambda,这实际上是一样的。

票数 1
EN

Stack Overflow用户

发布于 2015-12-07 16:34:45

对业绩有影响的一些替代办法:

  1. com.google.common.collect.Sets.cartesianProduct(java.util.Set...):“按照顺序从每个给定的集合中选择一个元素,返回每个可能形成的列表;集合的‘n进制笛卡尔积’。”。
    • 这要求列表元素是唯一的。如果它们不是,则必须将每个元素包装在一个唯一的对象中,以便它们都可以添加到输入集中。
    • 然而,在我的测试中,我发现它比flatMap/map解决方案慢。:-(

  1. forEach/forEach:由于您只是想对每一对执行一个操作,所以实际上不需要使用flatMapmap来转换列表,因此可以使用forEach/forEach: list.forEach {i -> list.forEach {j -> /*在这里执行操作*/ }
代码语言:javascript
复制
- In my testing I've found this to be slightly faster than the `for`/`for` solution. :-)

如果确实需要转换列表,那么您的flatMap/map解决方案似乎是最好的解决方案。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34112933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档