无法减少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) }