Kotlinのコレクションの拡張関数活用例まとめ
先生と生徒の会話形式で理解しよう
生徒
「Kotlinで配列やリストをもっと便利に使う方法ってありますか?」
先生
「ありますよ。Kotlinには『拡張関数』という機能があって、既存のコレクションに便利な機能を追加したり、もともと用意されているたくさんの便利関数を使えます。」
生徒
「例えばどんなことができるんですか?」
先生
「要素の検索、変換、グループ分け、重複削除、集計など、日常的によく使う処理を短いコードで書けます。では具体例を見ていきましょう。」
1. filterとmapで条件抽出と変換
filterは条件に合う要素だけを残し、mapは要素を別の形に変換します。
fun main() {
val numbers = listOf(1, 2, 3, 4, 5)
val doubledEven = numbers.filter { it % 2 == 0 }.map { it * 2 }
println(doubledEven)
}
[4, 8]
このように、偶数だけを取り出して2倍にする処理が1行で書けます。
2. any・all・noneで条件チェック
anyは「1つでも条件に合う要素があるか」、allは「すべての要素が条件を満たすか」、noneは「1つも条件に合う要素がないか」を判定します。
fun main() {
val ages = listOf(18, 20, 25)
println(ages.any { it < 20 }) // true
println(ages.all { it >= 18 }) // true
println(ages.none { it < 0 }) // true
}
3. distinctとtoSetで重複削除
リストから重複を削除するにはdistinct()やtoSet()が使えます。
fun main() {
val items = listOf("apple", "banana", "apple", "orange")
println(items.distinct()) // [apple, banana, orange]
println(items.toSet()) // [apple, banana, orange]
}
4. groupByでグループ分け
groupByは特定の条件で要素をまとめます。
fun main() {
val words = listOf("apple", "apricot", "banana", "blueberry")
val grouped = words.groupBy { it.first() }
println(grouped)
}
{a=[apple, apricot], b=[banana, blueberry]}
5. sum・average・countで集計
数値コレクションの合計や平均、件数を求められます。
fun main() {
val scores = listOf(80, 90, 100)
println(scores.sum()) // 270
println(scores.average()) // 90.0
println(scores.count()) // 3
}
6. zipで2つのコレクションを結合
同じ位置の要素同士をペアにします。
fun main() {
val names = listOf("Tom", "Jane")
val scores = listOf(80, 90)
val paired = names.zip(scores)
println(paired)
}
[(Tom, 80), (Jane, 90)]
7. flatten・flatMapで入れ子構造を平坦化
リストの中にリストがある場合、1つのリストにまとめます。
fun main() {
val nested = listOf(listOf(1, 2), listOf(3, 4))
println(nested.flatten()) // [1, 2, 3, 4]
}
8. sorted・sortedByで並び替え
sorted()は昇順に、sortedBy()は条件付きで並び替えます。
fun main() {
val items = listOf("banana", "apple", "cherry")
println(items.sorted()) // [apple, banana, cherry]
println(items.sortedBy { it.length }) // [apple, banana, cherry]
}
9. fold・reduceで累積計算
すべての要素を順番に処理して1つの値にまとめます。
fun main() {
val numbers = listOf(1, 2, 3)
println(numbers.fold(0) { acc, n -> acc + n }) // 6
}
10. 拡張関数を自作する
Kotlinでは自分で拡張関数を作ることもできます。例えば、リストの平均値を整数で返す拡張関数を作ると次のようになります。
fun List<Int>.averageInt(): Int {
return if (this.isEmpty()) 0 else this.sum() / this.size
}
fun main() {
val scores = listOf(70, 80, 90)
println(scores.averageInt()) // 80
}