【问题标题】:Unable to reduce a list of booleans in kotlin无法减少 kotlin 中的布尔值列表
【发布时间】:2017-08-24 12:01:58
【问题描述】:

我正在尝试在 kotlin 中映射到布尔值和归约值。这是我的代码

class Model{
 fun isEmpty() : Boolean
}


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

但是编译器给了我一个错误提示

Type mismatch required () Boolean? but found Boolean

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

【问题讨论】:

    标签: android kotlin kotlin-android-extensions


    【解决方案1】:

    这不是 Kotlin 的 lambda 语法。

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

    {
        arg1, ..., argn ->
        [ lambda body ]
        [ last statement (implicitly returned) ]
    }
    

    通过做

    list.asSequence().map { model ->
        {
            model.isEmpty()
        }
    }
    

    您正在制作一个 返回另一个 () -> Boolean 类型的 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)
    

    虽然这取决于个人喜好。

    【讨论】:

      猜你喜欢
      • 2011-05-30
      • 2021-03-15
      • 2012-03-17
      • 1970-01-01
      • 2016-05-05
      • 2013-10-20
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      相关资源
      最近更新 更多