Kotlinのsum・average・countで集計する方法
生徒
「Kotlinで数字の合計や平均を簡単に求める方法ってありますか?」
先生
「はい、Kotlinにはsum・average・countという集計用の関数があって、1行で計算できますよ。」
生徒
「それぞれどんなときに使うんですか?」
先生
「sumは合計、averageは平均、countは要素の数を数えるときに使います。では順番に見ていきましょう。」
1. sumで合計を求める
sumはリストや配列に入っている数値の合計を計算します。例えば、テストの点数や売上の合計を出したいときに便利です。
fun main() {
val scores = listOf(80, 90, 75, 100)
val total = scores.sum()
println(total)
}
345
リストに整数(Int)や小数(Double)が入っていれば、自動的に合計してくれます。
2. averageで平均を求める
averageは要素の平均値を計算します。例えば、クラス全員の平均点を出すときに使えます。
fun main() {
val scores = listOf(80, 90, 75, 100)
val avg = scores.average()
println(avg)
}
86.25
小数点付きで結果が返ってくるため、より正確な計算ができます。
3. countで要素数を数える
countはコレクションに入っている要素の数を数えます。単純に全要素数を数えるだけでなく、条件を付けて数えることもできます。
fun main() {
val scores = listOf(80, 90, 75, 100)
val totalCount = scores.count()
val highScores = scores.count { it >= 90 }
println(totalCount)
println(highScores)
}
4
2
この例では、全体の要素数と90点以上の人数を別々にカウントしています。
4. 条件付きsum・averageの応用
実はfilterと組み合わせれば、特定の条件に当てはまる要素だけを集計できます。
fun main() {
val sales = listOf(1200, 800, 1500, 2000, 500)
val highSalesTotal = sales.filter { it >= 1000 }.sum()
val highSalesAvg = sales.filter { it >= 1000 }.average()
println(highSalesTotal)
println(highSalesAvg)
}
4700
1566.6666666666667
これで「売上が1000円以上の合計と平均」など、条件付きの集計も簡単にできます。
5. 実用例:家計簿の集計
家計簿アプリを作る場合、月の支出合計や平均支出、支出項目数などを簡単に求められます。
data class Expense(val category: String, val amount: Int)
fun main() {
val expenses = listOf(
Expense("食費", 20000),
Expense("光熱費", 8000),
Expense("交通費", 5000),
Expense("食費", 15000)
)
val total = expenses.sumOf { it.amount }
val avg = expenses.map { it.amount }.average()
val categoryCount = expenses.map { it.category }.distinct().count()
println(total)
println(avg)
println(categoryCount)
}
48000
12000.0
3
このように、sum・average・countを組み合わせると、現実的なデータ集計がとても簡単にできます。
まとめ
Kotlinで数字を集計する場面は、とてもたくさんあります。家計簿の集計、売上の合計、テストの点数の平均、名簿の人数確認など、毎日のように使われる処理です。今回の記事で使ったsumやaverageやcountは、複雑な計算式を書く必要がなく、一行で数値の合計や平均、要素数を求められる便利な関数でした。とくにリストや配列が相手だと、手作業でループを書かずに素早く集計できるので、初心者でも安心して使えます。 合計を求めたいときはsumを使い、平均を知りたいときはaverageが使えました。平均は小数で返ってくるため、小さな差まで正確に表示できます。さらにcountを使えば、単純な数合わせや条件付きの人数カウントも可能でした。条件を使うと「何点以上の人数だけ数える」「何円以上の支出だけを対象にする」といった現場に近い集計方法が簡単に実現できます。 そしてfilterと組み合わせた応用では、「リストの中から条件に当てはまる要素だけを選び、sumやaverageで集計する」という流れがとても自然でした。条件付きの集計は実務の中でもよく必要になるため、この形を知っておくと一段と便利になります。さらに、sumOfやmapと合わせて要素の中の必要な値だけを取り出して集計する例も出てきました。データクラスを扱う場面や複数の項目を持つリストでも、迷わず扱えるようになるはずです。 Kotlinはコレクション操作に強く、日常的な集計作業が驚くほど短いコードで完結します。長いループを書いたり、変数を手動で足し合わせたりする必要がないので、コードの見通しもよく、バグが入りにくいという利点もあります。データが大きくなっても可読性を保ったまま処理できるため、後から読み返したときにも理解しやすい形になります。 ここからは、実際の集計をもう一度振り返るために、ひとつサンプルを追加しておきます。今回は家計簿のような身近なデータを使って、食費だけの合計や平均を出してみます。食費がいくつも入っている場合でも、filterで絞り込み、sumやaverageで素早く数字を出すことができます。
data class Expense(val category: String, val amount: Int)
fun main() {
val expenses = listOf(
Expense("食費", 22000),
Expense("交通費", 6000),
Expense("食費", 18000),
Expense("光熱費", 10000),
Expense("食費", 25000)
)
val foodTotal = expenses.filter { it.category == "食費" }.sumOf { it.amount }
val foodAvg = expenses.filter { it.category == "食費" }.map { it.amount }.average()
val countAll = expenses.count()
val countFood = expenses.count { it.category == "食費" }
println(foodTotal)
println(foodAvg)
println(countAll)
println(countFood)
}
65000
21666.666666666668
5
3
食費の合計や平均、全体の件数や食費だけの件数まで、すべて一行の計算で求められました。数が多いと計算ミスをしやすくなりますが、sumやaverageを使えば間違えにくく、コードも短くなります。何度も同じ処理を繰り返す家計簿や売上管理でも活躍します。 また、distinctを使えば重複するカテゴリー名も整理でき、mapで必要な値だけを取り出し、sumOfで合計まで完了できます。Kotlinのコレクション操作は短く書けるのに読みやすいため、集計が身近で扱いやすい存在になっていきます。 こうしたシンプルな処理でも、実際の開発ではとても大切です。データをまとめる力が身につくと、グラフの作成やレポート機能の追加にも応用しやすくなります。難しい手順を覚える前に、まずは基本のsum・average・countを繰り返し使い、自然と手が動くように練習していくと良いでしょう。 それでは、最後に先生と生徒の会話で振り返ってみます。
生徒
「今日の内容を振り返ると、sumとaverageとcountを使うだけで、たくさんの数字をまとめられるって分かりました。」
先生
「その通りです。特にリストの集計は手作業で計算すると間違えやすいので、こういう関数を活用すると安心ですね。」
生徒
「filterで条件をつけてからsumOfやaverageを使うと、特定のデータだけ集計できるのも便利でした。」
先生
「その考え方はとても大切です。実際の開発では条件付きの集計が多いので、今日の書き方はそのまま使えます。」
生徒
「次はグラフの作成にも挑戦できそうです。集計できれば表示もできそうですね。」
先生
「そうですね。データをまとめる力があると、表示や分析にも広がります。ゆっくり進めていきましょう。」