如何在 kotlin 1.5 中用 sumOf 替换 sumBy

Joã*_*los 6 kotlin

我有以下代码:

val sum = list.itens.sumBy { item ->
    when (item.intValueI == item.intValueII) {
        true -> 1
        else -> 0
    }
}
Run Code Online (Sandbox Code Playgroud)

更新到Kotlin 1.5,我收到deprecated警告;我应该如何继续实现相同的功能?

我尝试如下:

val result = list.itens.sumOf<ListItemClass> { item ->
    val intValueI = item.value ?: 0
    val intValueII = item.valueII ?: 0
    when(item.intValueI == item.IntValueII){
        true -> 1
        else -> 0
    }
}
Run Code Online (Sandbox Code Playgroud)

Jak*_*eam 6

为什么不过滤你的项目并计算它们而不是涉及数学,因为这似乎就是你所追求的?

val sum = list.items.filter { it.intValue1 == it.intValue2 }.size
Run Code Online (Sandbox Code Playgroud)

或者,更简单(感谢评论中的 Tenfour04!):

val sum = list.items.count { it.intValue1 == it.intValue2 }
Run Code Online (Sandbox Code Playgroud)

如果出于某种原因绝对需要使用sumOf,那么一个稍微有点 hacky 的解决方案是:

val sum = list.items.sumOf { 
  if (it.intValue2 == it.intValue2) 1 else 0 as Int
}
Run Code Online (Sandbox Code Playgroud)

看起来编译器/Android Studio 在返回 1 和 0 时有点困惑,因此需要或else之一。前者比较混乱,但后者会留下 AS 警告。it.intValue1 * 00 as Int

  • 您还可以输入“as Int”以避免出现问题,尽管这会触发“No Cast Needed”警告。不知道为什么编译器在这种情况下无法判断 1 和 0 都是 Int 而不是 Long。 (2认同)