2017-09-01 20 views
1

私はKotlinの高次関数を使って、特定の要素がリストに何回含まれているかを数えようとしています。私は何かを試してみましたKotlin:リスト内の出現量を数える高次関数?

val result: Int? = list.count{ list.contains("element") } 

しかし、それはリストのサイズを返すようです、私はなぜ分かりません。

答えて

4

あなたが実際に望むのは、指定された要素に等しい要素の数を数えることです(リスト全体ではなく、0になります) )。

list.contains("element")it == "element"に変更する必要があります。

count関数は、リストを反復処理して、その要素が述語と一致するかどうかをチェックします。 近似コード

fun <T> Iterable<T>.count(predicate: (T) -> Boolean) { 
    var count = 0  

    for (element in this) { 
     if (predicate(this)) { 
      count += 1 
     } 
    } 

    return count 
} 

あなたは、パラメータとしてlist.contains("element")を渡すと、それは同じことにlist.size回をチェックしているため、その後count関数が0またはlist.sizeを返すのいずれか。

Doing it == "element"でも動作は異なります。リスト全体をチェックする代わりに、現在の要素だけをチェックするだけです。あなたがJavaのバックグラウンドから来ているなら、itを次のように考えるほうが簡単かもしれません:Javaでは、(element) -> element.equals("element")のようなコードを持っていますが、Kotlinでは1つのパラメータと1つのみの高次関数明示的に名前を付けるとデフォルトでitになります。あなたはそれについてもう少し詳しく読むことができますhere