为什么IntelliJ建议将调用链转换为序列?

问题描述 投票:24回答:2

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

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

这很好用。但是,IntelliJ的代码检查表明:集合上的调用链应该转换为'Sequence':

Call chain on collection should be converted into 'Sequence'

应用此建议会导致

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

这有什么好处?

intellij-idea kotlin set code-inspection intellij-inspections
2个回答
15
投票

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

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

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


11
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.