【问题标题】:Check for a value in Kotlin immutable list检查 Kotlin 不可变列表中的值
【发布时间】:2021-04-21 19:52:11
【问题描述】:
我需要将 kotlin 中的以下几行浓缩为更优雅的方式。我无法弄清楚如何同时检查可选值和值。基本上我需要验证列表“a”是否存在,有一个或多个项目并且它们不是 0。
val a = Utils.getItems() // returns an Optional<ImmutableList<ItemChange>>
if(!a.orElse(ImmutableList.of()).size > 0) {
val nonZero = a.get().filter { it.item != BigDecimal.ZERO }
return nonZero.size > 0
}
【问题讨论】:
标签:
kotlin
guava
optional
【解决方案1】:
假设您还想在不存在或大小为 0 时返回 false,这就是我的做法。
any 函数在任何值匹配时返回 true,因此它已经处理了空列表的情况。如果找到任何匹配项,它会立即中断,而 filter 将彻底检查整个 List 并分配一个新 List 来保存结果。
Guava Optional 可以使用 orNull() 简单地转换为可空值,因为 Kotlin 已经内置了空值安全性。
val items = Utils.getItems().orNull()
return items != null && items.any { it.item != BigDecimal.ZERO }