Kotlin中list.all()与list.any()是否支持列表短路求值?
Kotlin中list.all()与list.any()的短路求值特性
不会对列表中所有对象进行求值,这两个函数都采用短路求值逻辑——只要能提前确定最终结果,就会立即停止遍历后续元素。
关于all()的行为
all()函数的逻辑是:只有当列表中所有元素都满足给定条件时,才返回true。一旦遇到第一个不满足条件的元素,就会直接返回false,不再处理剩余元素。
以你给出的示例为例:
val myList = listOf(1, 8, 11, 13, 15) val allOdd = myList.all { it % 2 == 1 }
当检查到第二个元素8时,发现它不满足it%2 ==1的条件,函数会立刻返回false,不会再对11、13、15进行求值。
你可以通过添加打印语句验证这一点:
val myList = listOf(1, 8, 11, 13, 15) val allOdd = myList.all { println("正在检查元素: $it") it % 2 == 1 } println("allOdd 的结果: $allOdd")
运行后输出:
正在检查元素: 1 正在检查元素: 8 allOdd 的结果: false
关于any()的行为
any()函数的逻辑是:只要列表中存在至少一个元素满足给定条件,就返回true。一旦遇到第一个满足条件的元素,就会直接返回true,不再处理剩余元素。
示例验证:
val myList = listOf(2, 4, 5, 6) val hasOdd = myList.any { println("正在检查元素: $it") it % 2 == 1 } println("hasOdd 的结果: $hasOdd")
运行后输出:
正在检查元素: 2 正在检查元素: 4 正在检查元素: 5 hasOdd 的结果: true
可以看到,检查到元素5满足条件后,函数立即停止,没有处理后续的6。
实际意义
这种短路特性在处理包含高开销操作的列表时尤为关键——比如lambda中涉及复杂计算、网络请求或文件IO的场景,能避免不必要的资源消耗,提升代码性能。
内容的提问来源于stack exchange,提问作者Keverly
相关产品推荐
相关产品推荐

