无法减少kotlin中的布尔值列表
我试图映射到布尔值并减少kotlin。 这是我的代码
class Model{ fun isEmpty() : Boolean } list.asSequence().map { model -> { model.isEmpty() } }.reduce { acc, next -> (acc && next)}
但编译器给了我一个错误告诉
Type mismatch required () Boolean? but found Boolean
我究竟做错了什么? 我希望我没有做任何在概念上的错误
这不是Kotlin的lambda语法。
Kotlin lambda 完全包含在{}
,即:
{ arg1, ..., argn -> [ lambda body ] [ last statement (implicitly returned) ] }
通过做
list.asSequence().map { model -> { model.isEmpty() } }
你正在做一个返回另一个类型为() -> Boolean
lambda的lambda:
{ model.isEmpty() }
所以这个lambda的实际类型是(Model) -> () -> Boolean
。
去除内部支架:
list.asSequence().map { model -> model.isEmpty() }.reduce { acc, next -> acc && next }
另外,单参数lambdas有一个隐含的参数名称,所以你可以写:
list.asSequence().map { it.isEmpty() }.reduce { acc, next -> acc && next }
此外,它看起来像你试图检查整个列表是否为空。 我相信你可以简单地写:
list.all { it.isEmpty() }
或使用方法参考:
list.all(Model::isEmpty)
尽管这是个人喜好。
你可以在这里使用方法引用:
list.asSequence().map(Model::isEmpty).reduce { acc, next -> (acc && next) }
另外,修复你的lambda:
list.asSequence().map { it.isEmpty() }.reduce { acc, next -> (acc && next) }