请问这段代码哪里出了问题。

这段代码最终目标是判断大于100,所以只要直接迭代累加sum的值,当sum超过100时,后面其实是不用算的了,可以直接break出去。

溢出了怎么办

这是因为java stream的lambda没有local-return功能,循环里面无法break,最多某些operator在返回null时候可以break掉当前迭代,这是个语言设计的问题。用kotlin就完全不会发生这回事,因为kotlin的inline function可以local return。

fun doSomething(foos: List<Foo>) {
    foos.asSequence()
        .filter { it.value > 10 }
        .map { it.value }
        .reduce { acc, x ->
            (acc + x)
                .takeUnless { it > 100 }
                ?: return println("Found a sum over 100")
        }