无法减少 kotlin 中的布尔值列表
Unable to reduce a list of booleans in 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()
}
}
您正在创建一个 lambda returns 另一个 () -> 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)
虽然这取决于个人喜好。
我正在尝试映射到 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()
}
}
您正在创建一个 lambda returns 另一个 () -> Boolean
:
{
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)
虽然这取决于个人喜好。