2017-08-24 33 views
1

我想要映射到布爾值並減少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 

我在做什麼錯?我希望我沒有做任何概念上的錯誤

回答

7

這不是Kotlin的lambda語法。

科特林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) 

儘管這是給個人的喜好。