android - 无法减少 kotlin 中的 bool 值列表

标签 android kotlin kotlin-android-extensions

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

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 lambdas 完全包含在 {} 中,即:

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

通过做

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

你正在创建一个 lambda,它返回另一个 () -> 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)

虽然这取决于个人喜好。

关于android - 无法减少 kotlin 中的 bool 值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45861106/

相关文章:

android - 我尝试使用 Androidx 实现房间数据库,但出现错误

android - Kotlin android 扩展 fragment View null

java - java方法接受null类数组的kotlin反射

Android LinearLayout 和 RecyclerView BottomNavigation 对齐

android - 找不到方法 androidExtensions()

android - 面向 iOS、Android 和 WP7 的 Web 应用程序?

Android 服务的 onBind 未被调用,即使连接了客户端也正在调用 onDestroy

android - 使用 Wifi 直连的点对点 android 和 iOS(多点连接?)

java - 为什么使用 View 绘制 Canvas 会导致 NPE?

Kotlin 协程运行阻塞未按预期工作并且无法阻止 for 循环的执行