groupingByでリストを効率的に集計・分類

Kotlin
記事内に広告が含まれる場合があります

Kotlinでは、リストの要素を特定の条件ごとに分類し、さらに 集計処理を簡単に行う ために groupingBy という便利な関数が用意されています。これを使うことで、手動でループを回すことなく、効率的なデータ処理が可能になります。

groupingByの基本的な使い方

1. 要素の出現回数をカウント

Kotlin
val words = listOf("apple", "banana", "apple", "cherry", "banana", "apple")

val wordCount = words.groupingBy { it }.eachCount()

println(wordCount) // 出力: {apple=3, banana=2, cherry=1}

このように、eachCount() を使うことで、リスト内の要素ごとの出現回数を簡単に取得できます。


2. グループ化したリストを作成

Kotlin
val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)

val grouped = numbers.groupingBy { if (it % 2 == 0) "偶数" else "奇数" }.eachCount()

println(grouped) // 出力: {奇数=5, 偶数=5}

偶数・奇数で分類しながら、それぞれの個数をカウントできます。


3. カスタム集計処理

foldreduce を組み合わせることで、単なるカウントだけでなく、任意の計算も可能です。

Kotlin
val scores = listOf(80, 90, 85, 70, 95, 60, 50)

val averageByRange = scores.groupingBy { it / 10 * 10 }
    .fold(0 to 0) { acc, score -> 
        acc.first + score to acc.second + 1 
    }
    .mapValues { it.value.first / it.value.second }

println(averageByRange) // 出力: {50=50, 60=60, 70=70, 80=82, 90=92}

このコードでは、スコアを 10点刻みで分類 し、それぞれのグループの平均値を計算しています。


groupingByを活用するメリット

  1. リストを特定の条件で分類しながら集計ができる
  2. ループを使わずに可読性の高いコードが書ける
  3. eachCount()fold() などと組み合わせることで、多様な集計処理に対応可能

データを集計・分類する際は、ぜひ groupingBy を活用してみてください!

タイトルとURLをコピーしました