Kotlin 序列的终端运算符会丢弃输出吗?

gra*_*bie 1 sequence kotlin

我正在处理非常大的 Kotlin 序列,我在序列的每一步上执行逻辑,并且我不需要将整个序列保留在内存中。

目前我的代码如下所示

hugeSequence
    .filter { ... } 
    .map {...... }
    .onEach {
        callExpensiveOperation(it)
    }
    .toList()  <- this feels wrong
Run Code Online (Sandbox Code Playgroud)

底部toList()terminal运算符,但我担心 Kotlin 可能会尝试在内存中创建一个巨大的列表,然后才意识到我什至没有分配该操作的结果值。

我可以使用任何其他终端操作符来触发序列启动吗?

mar*_*ran 5

使用forEach而不是onEach. 它是 的终端等效项onEach

hugeSequence
    .filter { ... } 
    .map {...... }
    .forEach {
        callExpensiveOperation(it)
    }
Run Code Online (Sandbox Code Playgroud)