2016-01-06 8 views

答えて

12

組み込み操作toList()などでカバーされていないシナリオの場合、collectは単なる折り畳みであるという事実を使うことができます。だから、あなたはその後、拡張機能

fun <T, R> Iterable<T>.collectTo(accumulator: R, accumulation: (R, T) -> Unit) = 
    this.fold(accumulator, { accumulator, item -> accumulation(accumulator, item); accumulator }) 

を定義する場合は、さらに簡素化することができ

val list: List<Pair<String, Int>> = listOf("Ann" to 19, "John" to 23) 

はあなたが倍

val map: Map<String, Int> = list.fold(HashMap(), { accumulator, item -> 
    accumulator.put(item.first, item.second); accumulator}) 

でお好みのコレクションに収集することができます与えられた

val map2: Map<String, Int> = list.collectTo(HashMap(), { accumulator, item -> 
    accumulator.put(item.first, item.second) }) 

Althouもちろん、この場合は、.toMap拡張機能を使用するだけで済みます。

4

注:あなたは、あなたがKotlinに既存のSTDLIB機能を使用できるJava 8からStream.collectを使用することになり、いくつかの一般的な例については。 Kotlinで見つけることができないものについては、@ duncanの答えに記述されているカスタムフローの作成を探ることができます。この回答は、stdlib内で何ができるかを知るために追加されているので、カスタムを書くタイミングを決めることができます。 "Java Stream.collectのKotlinに相当するものは何ですか?"

/アレイから、へ/リストからの平均、カウント、別個の、フィルタリング、発見、グループ化、接合、マッピング、MIN、MAX、分割、切断用STDLIBにおける機能、ソート、加算は、あります、地図、組合、共反復、すべての機能的パラダイムなどに/から。リトル1ライナーとJava 8のより複雑な構文を使用する必要はありません。内蔵のJava 8 Collectorsクラスから唯一欠けているものは、要約です。 What Java 8 Stream.collect equivalents are available in the standard Kotlin library?

関連する問題