Kotlin 设置序列的最有效方式

MrN*_*ful 1 sequence kotlin

嗨,我有 1330 个对象的列表,并且想应用方法并获得集合作为结果。

        val result = listOf1330
            .asSequence()
            .map {
                someMethod(it)
            }
        val resultSet = result.toSet()
Run Code Online (Sandbox Code Playgroud)

它在没有 toSet 的情况下工作正常,但如果执行时间长了大约 10 倍。我已经使用序列来使它工作得更快,但结果我需要没有重复的列表(设置)。

简单地说:将序列转换为集合的最有效方法是什么?

Eug*_*nko 6

 val result = listOf1330.mapTo(HashSet()) { someMethod(it) }
Run Code Online (Sandbox Code Playgroud)

使用流或序列来实现转换的意义不大——您将需要集合中的所有元素,而不是几个。的mapTo(和map)功能是inline在科特林。这意味着代码将被替换到调用站点中,它不会多次创建和执行 lambda。我们mapTo用来避免toSet()函数完成集合的第二个副本。

.parallelStream()可以添加更多的性能,如果你想在多个线程运行计算。衡量线程之间负载平衡的好坏仍然是一个好主意。性能可能取决于您调用它的集合实现类