26

假设以下 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()

这有什么好处?

4

2 回答 2

15

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

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

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

于 2018-09-18T09:29:22.803 回答
13

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

于 2018-09-18T09:30:22.047 回答