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. カスタム集計処理
fold
や reduce
を組み合わせることで、単なるカウントだけでなく、任意の計算も可能です。
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を活用するメリット
- リストを特定の条件で分類しながら集計ができる
- ループを使わずに可読性の高いコードが書ける
eachCount()
、fold()
などと組み合わせることで、多様な集計処理に対応可能
データを集計・分類する際は、ぜひ groupingBy
を活用してみてください!