运行list.all()list.any()个函数时,Kotlin是否计算列表中的所有对象.例如:

val myList = listOf(1, 8, 11, 13, 15)
val allOdd = myList.all { it % 2 == 1 }

Kotlin会判断第二元素及以后的元素吗?

显然,这在本例中没有太大区别,但给出一个要计算的函数列表,这可能会产生重大影响.

推荐答案

allsource code为基础,一旦找到列表中与谓词不匹配的元素,它将立即返回,并且不继续计算其余元素:

public inline fun <T> Iterable<T>.all(predicate: (T) -> Boolean): Boolean {
    if (this is Collection && isEmpty()) return true
    for (element in this) if (!predicate(element)) return false
    return true
}

any类似的情况.


这可以使用以下代码进行测试:

var evaluatedLastItem = false
val list = listOf(
    { true },
    { false },
    {
        evaluatedLastItem = true
        false
    }
)
val allTrue = list.all { it() == true }

println("allTrue = $allTrue")
println("evaluatedLastItem = $evaluatedLastItem")

输出:

allTrue = false
evaluatedLastItem = false

Kotlin相关问答推荐

在Kotlin中可以连接两个范围吗?

列表在 android WebView 中没有正确迭代

使用 StateFlow 时如何移除监听器?

Kotlin 数据类中的大量参数

Jetpack Compose:当状态从另一个活动改变时强制重组

如何为 Kotlin 中的每个循环设置以避免越界异常

Kotlin SAM/功能接口抛出 AbstractMethodError

Mixin 在 Jackson 中添加 defaultImpl 不起作用

为什么 android studio 不为所有安全参数生成代码?

在粘贴时将 java 转换为 kotlin

Kotlin 中 lambda 表达式中的默认参数

片段内的 Kotlin 按钮 onClickListener 事件

requireNotNull vs sure !! 操作符

使用 Paging 3 时保存并保留 LazyColumn 滚动位置

Kotlin-通过与属性列表进行比较来筛选对象列表

用于代码生成的ANTLR工具版本4.7.1与当前运行时版本4.5.3不匹配

如何让数据类在Kotlin中实现接口/扩展超类属性?

在kotlin中初始化类变量的正确位置是什么

spring.config.location 在 Spring Boot 2.0.0 M6 上不起作用

从 java 活动 *.java 启动 kotlin 活动 *.kt?