Kotlin 科特林平面地图-地图

Kotlin 科特林平面地图-地图,kotlin,Kotlin,假设我有一个大小为30k的元素列表,我想对列表中所有可能的对执行一个操作。所以我有: list.asSequence().flatMap { i -> list.asSequence().map { j -> /* perform operation here */ } } 问题1: 有什么可以替代的吗?(例如应用函子) 我还注意到,这个flatMap操作比命令式循环版本慢得多。(可能是因为关闭?) 问题2:是否有办法提高flatMap/map版本的性能?一

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

 list.asSequence().flatMap { i -> 
         list.asSequence().map { j -> /* perform operation here */ }
 }
问题1: 有什么可以替代的吗?(例如应用函子)

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


问题2:是否有办法提高flatMap/map版本的性能?

一些具有性能影响的替代方案:

  • :“返回通过按顺序从每个给定集合中选择一个元素可以形成的所有可能列表;集合的‘n元’。”
    • 这要求列表元素是唯一的。如果它们不是,那么您必须将每个元素包装在一个唯一的对象中,以便它们都可以添加到输入集中
    • 然而,在我的测试中,我发现它比
      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 */ }
    }