【发布时间】:2019-03-14 12:15:12
【问题描述】:
您好,我有 1330 个对象的列表,想应用方法并获取结果集。
val result = listOf1330
.asSequence()
.map {
someMethod(it)
}
val resultSet = result.toSet()
没有 toSet 也能正常工作,但如果那样的话,执行时间会长 10 倍左右。 我使用了序列来使其工作得更快,但结果我需要没有重复的列表(设置)。
简单:将序列转换为集合的最有效方法是什么?
【问题讨论】:
-
不清楚你在问什么。如果没有 toSet(),它可能无法正常工作:代码无法编译。澄清你的问题。
-
答案:最有效的方法是在序列上调用 toSet()。还有什么比这更有效的方法吗?
-
为什么它不起作用,@JBNizet?在 Kotlin 中,您不需要像在 Java 中那样指定 toList()、toSet() 变体。
-
@ThalesMinussi 因为 Sequence.map() 返回的是序列,而不是集合。而且 Sequence 没有实现 Set 接口。所以你不能用序列初始化 Set 类型的变量。
-
正如我刚才所说:创建序列没有任何作用。它是瞬时的。需要时间的是遍历序列的每个元素,通过在每个元素上调用 someMethod() 来映射它,创建一个 Set 并填充它。这一切都发生在调用
toSet()时。所以最慢的是你的方法 someMehod() (或你的 hashCode() 方法,但这不太可能)