kotlin

2017-08-24 8 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 
を伝えるエラーを与えますか?私は、これはKotlinのラムダ構文ではありません

答えて

7

概念的に何も悪いことは致しておりません願っています。

Kotlinのラムダは完全はすなわち、{}内に含まれています。

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

あなたはラムダを作っている

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

を行うことでその戻りタイプ() -> Booleanの別のラムダ:

{ 
    model.isEmpty() 
} 

したがって、このラムダの実際のタイプは(Model) ->() -> Booleanです。

削除インナーブラケット:あなただけ書くことができるので、さらに

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

は、単一パラメータのラムダは、暗黙のパラメータ名itがあります。また

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

を、それはあなたがしているように見えますリスト全体が空であるかどうかをチェックしようとします。私はあなたが簡単に書くことができると信じて:

list.all { it.isEmpty() } 

またはメソッド参照を使用します。

list.all(Model::isEmpty) 

それは個人の好み次第ですけれども。