1

本质上,我需要从一些项目的不可变列表开始,将其转换为可变列表并添加一些项目,然后使用firstOrNull. 这是我的暂存文件:

val immutableStarter = listOf(1, 2, 3)

val mutable = immutableStarter.toMutableList()
mutable.add(4)
mutable.addAll(listOf(5, 6, 7))
mutable.add(8)

println(mutable)

val result = mutable.firstOrNull { item ->
    println("Checking Item $item")
    item > 7
} ?: 0

println(result)

println(mutable)调用正确打印包含所有八个项目的列表。但是,该firstOrNull操作似乎仅在列表中的前三个项目上运行。我只得到了"Checking Item $item"三遍输出。如果我向它添加第四个项目,immutableStarter它会检查四次。所以我能收集到的最好的东西,出于某种原因,它只是迭代初始的、不可变的起始列表中的项目。

如果我将第 10-15 行包装在try/catch或 with 中run,我会得到我期望的输出 -"Checking Item $item"列表中 8 项中的每一项的打印输出。

为什么这不像我写的那样工作,以及将firstOrNull调用包装在try/中catch或者run使它工作的原因是什么?

=================================================

编辑:有人要求我的暂存文件的输出。这里是:

Checking Item 1
Checking Item 2
Checking Item 3
val immutableStarter: List<Int>

val mutable: MutableList<Int>
true
true
true

[1, 2, 3, 4, 5, 6, 7, 8]


val result: Int


0

看起来它可能是如何评估暂存文件的问题 - 看起来 IntelliJ 可能正在尝试异步评估暂存文件。例如,切换Use REPLIntelliJ 顶部的复选框,可以得到我期望的输出:

res2: kotlin.Boolean = true
res3: kotlin.Boolean = true
res4: kotlin.Boolean = true

[1, 2, 3, 4, 5, 6, 7, 8]



Checking Item 1
Checking Item 2
Checking Item 3
Checking Item 4
Checking Item 5
Checking Item 6
Checking Item 7
Checking Item 8

8
4

0 回答 0