幽默:过度使用Lambda的Java代码

19-08-10 banq
                   

                   

2
sinaID96127
2019-08-16 09:00

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

sinaID16397
2019-08-20 09:42

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

kof99
2019-08-21 08:03

溢出了怎么办

JasonMing
2019-08-21 10:29

这是因为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")
        }
} 

2Go 1 2 下一页