sumBy(selector)返回Int
sumByDouble(selector)返回Double
为什么sumBy不返回Long?这有解决方法吗?
mie*_*sol 23
这是Kotlin团队做出的决定.由于在Java中不可能有返回类型重载,因此sumBy*必须根据返回类型使用不同的名称.
sumByLong尽管如此,添加自己很容易:
inline fun <T> Iterable<T>.sumByLong(selector: (T) -> Long): Long {
var sum = 0L
for (element in this) {
sum += selector(element)
}
return sum
}
Run Code Online (Sandbox Code Playgroud)
您也可以使用sum()扩展功能里面确实有一个Long变种,会同map()
val totalLength = files.map { it.length() }.sum()
Run Code Online (Sandbox Code Playgroud)
或者您可以将其包装到扩展函数中,尽管与内联版本相比,我看不出太多好处:
inline fun <T> Iterable<T>.sumByLong(selector: (T) -> Long): Long {
return map { selector(it) }.sum()
}
Run Code Online (Sandbox Code Playgroud)
您可以选择使用fold函数。
val totalLength = files.fold(0L) { acc, it -> acc + it.length() }
Run Code Online (Sandbox Code Playgroud)
它并不比sumBy代码长多少。
| 归档时间: |
|
| 查看次数: |
2698 次 |
| 最近记录: |