假设我有一个30k元素的列表,我想对列表中所有可能的对执行一个操作。所以我有:
list.asSequence().flatMap { i ->
list.asSequence().map { j -> /* perform operation here */ }
}问题1:有什么可供选择的吗?(如应用函子)。
我还注意到,这个平台地图操作比命令式循环版本慢得多。(可能是因为关闭?)
for(i in list){
for(j in list){
}
}问题2:是否有提高平台地图/地图版本性能的方法?
发布于 2015-12-07 18:17:45
在回答问题2时,我们考虑添加flatMap重载,它不会为外部集合/序列中的每个元素创建闭包:https://youtrack.jetbrains.com/issue/KT-8602
但是,如果您想对每对执行一些副作用,而不是转换序列,我建议您坚持使用for-loops或内联的forEach lambda,这实际上是一样的。
发布于 2015-12-07 16:34:45
对业绩有影响的一些替代办法:
flatMap/map解决方案慢。:-(
forEach/forEach:由于您只是想对每一对执行一个操作,所以实际上不需要使用flatMap或map来转换列表,因此可以使用forEach/forEach:
list.forEach {i -> list.forEach {j -> /*在这里执行操作*/ }- In my testing I've found this to be slightly faster than the `for`/`for` solution. :-)
如果确实需要转换列表,那么您的flatMap/map解决方案似乎是最好的解决方案。
https://stackoverflow.com/questions/34112933
复制相似问题