【发布时间】:2017-10-24 13:51:22
【问题描述】:
我写了以下代码:
val src = (0 until 1000000).toList()
val dest = ArrayList<Double>(src.size / 2 + 1)
for (i in src)
{
if (i % 2 == 0) dest.add(Math.sqrt(i.toDouble()))
}
IntellJ(在我的例子中是 AndroidStudio)询问我是否想用 stdlib 中的操作替换 for 循环。这将产生以下代码:
val src = (0 until 1000000).toList()
val dest = ArrayList<Double>(src.size / 2 + 1)
src.filter { it % 2 == 0 }
.mapTo(dest) { Math.sqrt(it.toDouble()) }
现在我必须说,我喜欢更改后的代码。当我遇到类似情况时,我发现编写比 for 循环更容易。然而,在阅读了 filter 函数的作用后,我意识到与 for 循环相比,这是一个慢得多的代码。 filter 函数创建一个新列表,其中仅包含 src 中与谓词匹配的元素。因此,在 stdlib 版本的代码中,又创建了一个列表和一个循环。 Ofc 对于小型列表可能并不重要,但总的来说这听起来不是一个好的选择。特别是如果你应该像这样链接更多的方法,你可以获得很多额外的循环,这些循环可以通过编写一个 for 循环来避免。
我的问题是在 Kotlin 中什么被认为是好的做法。我应该坚持 for 循环还是我错过了一些东西并且它不起作用,因为我认为它起作用了。
【问题讨论】:
标签: kotlin