无法减少kotlin中的布尔值列表

Ash*_*win 3 android kotlin kotlin-android-extensions

我试图映射到布尔值并减少kotlin.这是我的代码

class Model{
 fun isEmpty() : Boolean
}


list.asSequence().map { model ->
      {
        model.isEmpty()
      }
     }.reduce { acc, next -> (acc && next)}
Run Code Online (Sandbox Code Playgroud)

但编译器给我一个错误的告诉

Type mismatch required () Boolean? but found Boolean
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?我希望我没有做任何概念错误的事情

Moi*_*ira 11

这不是Kotlin的lambda语法.

Kotlin lambdas 完全包含在内{},即:

{
    arg1, ..., argn ->
    [ lambda body ]
    [ last statement (implicitly returned) ]
}
Run Code Online (Sandbox Code Playgroud)

通过做

list.asSequence().map { model ->
    {
        model.isEmpty()
    }
}
Run Code Online (Sandbox Code Playgroud)

你正在创建一个lambda,返回另一个类型的lambda () -> Boolean:

{
    model.isEmpty()
}
Run Code Online (Sandbox Code Playgroud)

所以这个lambda的真实类型是(Model) -> () -> Boolean.

取下内支架:

list.asSequence().map { model -> model.isEmpty() }.reduce { acc, next -> acc && next }
Run Code Online (Sandbox Code Playgroud)

另外,单参数lambdas有一个隐式参数名it,所以你可以写:

list.asSequence().map { it.isEmpty() }.reduce { acc, next -> acc && next }
Run Code Online (Sandbox Code Playgroud)

此外,您似乎正在尝试检查整个列表是否为空.我相信你可以简单地写:

list.all { it.isEmpty() }
Run Code Online (Sandbox Code Playgroud)

或使用方法参考:

list.all(Model::isEmpty)
Run Code Online (Sandbox Code Playgroud)

虽然这取决于个人喜好.