【问题标题】:Why does IntelliJ suggest to convert a call chain into a Sequence?为什么 IntelliJ 建议将调用链转换为序列?
【发布时间】:2019-02-22 06:59:49
【问题描述】:

假设以下 Kotlin 示例将源集 src 映射到目标集 dst

private val src: Set<String> = setOf("hello", "world")
private val dst: Set<Int> = src.map { it.length }.toSet()

这很好用。但是,IntelliJ 的代码检查表明:集合上的调用链应转换为“序列”:

应用此建议会导致

private val dst: Set<Int> = src.asSequence().map { it.length }.toSet()

这样做有什么好处?

【问题讨论】:

    标签: intellij-idea kotlin set code-inspection intellij-inspections


    【解决方案1】:

    在这种情况下,建议不是最理想的。重写此代码的正确方法(也不会导致任何 IntelliJ 警告)是:

    src.mapTo(hashSetOf()) { it.length }
    

    这将避免创建随后将转换为集合的中间列表;数据将立即添加到结果集中。

    【讨论】:

    • 谢谢,我为此创建了一个问题:youtrack.jetbrains.com/issue/KT-26926
    • 我没有看到很多mapTo的用法。它在某处被称为成语吗?尤其是显示的用例,如果是一个很好的例子
    【解决方案2】:

    Set.map 返回一个列表,然后在将其转换为集合后立即将其丢弃。 asSequence 的好处是序列进行转换,大概没有临时列表。

    【讨论】:

      猜你喜欢
      • 2018-06-20
      • 1970-01-01
      • 2011-12-05
      • 2019-06-24
      • 1970-01-01
      • 2012-01-04
      • 2012-03-05
      • 1970-01-01
      • 2011-01-15
      相关资源
      最近更新 更多