我有一个对象列表。importerResponse.applications
为空(大小= 0)
这是我的代码:
val isDeployed = importerResponse.applications
.flatMap(Application::instances)
.map(Instance::state)
.all { state -> DEPLOYED == state }
isDeployed
在这种情况下为true。怎么会这样?如果applications
为空,我希望它解析为false。
您为什么要那个?集合中的所有元素都满足您的谓词。
您可以查看文档:https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.sequences/all.html
如果需要,您可以明确检查集合是否为空
all
方法可能正在寻找任何不符合条件的元素,因为您没有任何条件,它默认为true。
您可以通过执行以下操作来实现所需的目标:
val isDeployed = importerResponse.applications
.flatMap(Application::instances)
.map(Instance::state)
.let { it.size() > 0 && it.all { state -> DEPLOYED == state } }
请注意,let
允许您重复使用相同的表达式而无需重新计算两次。
这可能有点令人困惑,为什么“ any”在空集合上返回“ false”,而“ all”返回true,因为“ all”似乎比“ any”(基于人类语言)更具局限性。
但是如果您举一个例子,“一个房间里的所有人是否都是男性”,那么如果房间是空的,那仍然是正确的。 0人中有0人为ALL。