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)
虽然这取决于个人喜好.
| 归档时间: |
|
| 查看次数: |
804 次 |
| 最近记录: |