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

时间:2017-08-24 12:01:59

标签: android kotlin kotlin-android-extensions

我正在尝试映射到布尔值并减少kotlin。这是我的代码

class Model{
 fun isEmpty() : Boolean
}


list.asSequence().map { model ->
      {
        model.isEmpty()
      }
     }.reduce { acc, next -> (acc && next)}

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

Type mismatch required () Boolean? but found Boolean

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

1 个答案:

答案 0 :(得分:11)

这不是Kotlin的lambda语法。

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

{
    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 }

此外,单参数lambda具有隐式参数名it,因此您只需编写:

list.asSequence().map { it.isEmpty() }.reduce { acc, next -> acc && next }

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

list.all { it.isEmpty() }

或使用方法参考:

list.all(Model::isEmpty)

虽然这取决于个人偏好。