Kotlin 科特林平面地图-地图
假设我有一个大小为30k的元素列表,我想对列表中所有可能的对执行一个操作。所以我有:Kotlin 科特林平面地图-地图,kotlin,Kotlin,假设我有一个大小为30k的元素列表,我想对列表中所有可能的对执行一个操作。所以我有: list.asSequence().flatMap { i -> list.asSequence().map { j -> /* perform operation here */ } } 问题1: 有什么可以替代的吗?(例如应用函子) 我还注意到,这个flatMap操作比命令式循环版本慢得多。(可能是因为关闭?) 问题2:是否有办法提高flatMap/map版本的性能?一
list.asSequence().flatMap { i ->
list.asSequence().map { j -> /* perform operation here */ }
}
问题1:
有什么可以替代的吗?(例如应用函子)
我还注意到,这个flatMap操作比命令式循环版本慢得多。(可能是因为关闭?)
问题2:是否有办法提高flatMap/map版本的性能?一些具有性能影响的替代方案:
- 这要求列表元素是唯一的。如果它们不是,那么您必须将每个元素包装在一个唯一的对象中,以便它们都可以添加到输入集中
- 然而,在我的测试中,我发现它比
/flatMap
解决方案慢-(map
forEach
/forEach
:由于您只想对每一对执行操作,因此实际上不需要使用flatMap
或map
来转换列表,因此您可以改为使用forEach
/forEach
:
list.forEach { i ->
list.forEach { j -> /* perform operation here */ }
}
- 在我的测试中,我发现这比/
解决方案略快。:-)的
如果您确实需要转换列表,那么您的
flatMap
/map
解决方案似乎是最佳解决方案。在回答问题2时,我们正在考虑添加flatMap
重载,它不会为外部集合/序列中的每个元素创建闭包:
但是,如果你想对每一对执行一些副作用,而不是转换序列,我建议坚持使用
for
-循环或内联forEach
lambdas,这实际上是一样的。谢谢你的建议:)如果考虑使用KT-8602,我会很高兴,或者类似嵌套列表理解的东西,真的很期待吗?Guava与Kotlin兼容吗?@IgorGanapolsky Guava可以在Kotlin中用于JVM,是的。
list.forEach { i ->
list.forEach { j -> /* perform operation here */ }
}