カテゴリ: Kotlin 更新日: 2025/12/19

Kotlinのコレクション操作まとめ!初心者が知っておきたいポイント

Kotlinのコレクション操作まとめ!初心者が知っておきたいポイント
Kotlinのコレクション操作まとめ!初心者が知っておきたいポイント

先生と生徒の会話形式で理解しよう

生徒

「Kotlinでリストや配列の使い方を効率的に覚える方法ってありますか?」

先生

「ありますよ。Kotlinには『コレクション操作』と呼ばれる便利な機能がたくさんあり、短いコードで複雑な処理を実現できます。」

生徒

「例えばどんなことができるんですか?」

先生

「要素の検索、並び替え、重複削除、グループ分け、集計などですね。それでは、初心者でもわかるように1つずつ見ていきましょう。」

1. filterとmapで条件抽出と変換

1. filterとmapで条件抽出と変換
1. filterとmapで条件抽出と変換

filterは「条件に合うものだけを残す」ための機能です。リストの中から必要なデータだけを選びたいときに使います。

mapは「各要素を別の形に変換する」ための機能です。たとえば数値を2倍にしたり、文字列に加工したりできます。

初心者の方は、まず「filterで選ぶ → mapで加工する」という流れで覚えると、Kotlinのリスト操作(コレクション操作)が一気に理解しやすくなります。


fun main() {
    val numbers = listOf(1, 2, 3, 4, 5)

    // 偶数だけ残して(filter)、その偶数を2倍にする(map)
    val doubledEven = numbers.filter { it % 2 == 0 }.map { it * 2 }

    println(doubledEven)
}

[4, 8]

この例では、1〜5の中から偶数(24)だけをfilterで取り出し、次にmapでそれぞれを2倍にしています。

「リストの中から必要なものだけを抽出して、見やすい形に変換する」という考え方は、データ処理や集計の前段でもよく使うので、ここでしっかり慣れておくと安心です。

2. any・all・noneで条件チェック

2. any・all・noneで条件チェック
2. any・all・noneで条件チェック

anyallnoneは、リスト(コレクション)の中身が「条件を満たしているか」を一言でチェックできる便利な関数です。if文で何回も判定を書くよりスッキリするので、Kotlinのコレクション操作の基本として覚えておくと役立ちます。

anyは「1つでも条件に合う要素があるか」、allは「全部が条件に合うか」、noneは「1つも条件に合う要素がないか」を確認します。結果はすべてtruefalseで返ってきます。


fun main() {
    val ages = listOf(18, 20, 25)

    // any:20歳未満が1人でもいる?
    println(ages.any { it < 20 })   // true(18がある)

    // all:全員が18歳以上?
    println(ages.all { it >= 18 })  // true(全員18以上)

    // none:マイナスの年齢の人はいる?
    println(ages.none { it < 0 })   // true(いない)
}

たとえば「未成年が含まれているか」「全員が条件を満たしているか」「該当データが存在しないことを確認したい」といった場面でよく使います。コレクションの条件チェックを短く書けるので、初心者のうちに慣れておくと読みやすいコードになります。

3. distinct・toSetで重複削除

3. distinct・toSetで重複削除
3. distinct・toSetで重複削除

リストに同じ値が何度も入っていると、表示がくどくなったり、集計結果がズレたりすることがあります。そんなときに役立つのが、Kotlinの重複削除です。

distinct()は「同じ要素を1回だけ残す」関数で、元の順番をできるだけ保ったまま重複を取り除けます。一方、toSet()はリストをセット(集合)に変換して重複をなくします。セットは「同じ値を持てない」性質があるため、自然に重複が消えるイメージです。


fun main() {
    val items = listOf("apple", "banana", "apple", "orange", "banana")

    // distinct:重複を消して、見やすいリストにする
    println(items.distinct()) // [apple, banana, orange]

    // toSet:セットに変換して重複を消す(型がSetになる)
    println(items.toSet())    // [apple, banana, orange]
}

たとえば「検索結果のタグ一覧」「選択肢の候補」「ユーザーが入力した値の一覧」など、同じ要素が混ざりやすい場面でよく使います。まずは手軽にリストを整理したいならdistinct重複しない集合として扱いたいならtoSet、という感覚で覚えると迷いにくいです。

4. groupByでグループ分け

4. groupByでグループ分け
4. groupByでグループ分け

groupByは、リストの要素を「あるルール(条件)」で仕分けして、グループにまとめるための機能です。たとえば、名前を頭文字ごとに分けたり、点数を合格・不合格で分けたりといった整理が、短いコードでできます。

結果は「キー(分類の基準)」と「そのキーに入った要素の一覧」という形になります。つまり、分類表を自動で作るようなイメージです。データを見やすく整理したいときに、Kotlinのコレクション操作としてよく登場します。


fun main() {
    val words = listOf("apple", "apricot", "banana", "blueberry")

    // 先頭の文字(a / b)でグループ分けする
    val grouped = words.groupBy { it.first() }

    println(grouped)
}

{a=[apple, apricot], b=[banana, blueberry]}

この例では、it.first()で「単語の最初の文字」を取り出し、その文字ごとにまとめています。aのグループにはappleapricotbのグループにはbananablueberryが入ります。

「カテゴリ別に一覧を作る」「種類ごとに分けて表示する」といった場面で便利なので、まずは何をキーにして分けたいかを決めるのがポイントです。

5. sum・average・countで集計

5. sum・average・countで集計
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つのコレクションを結合

6. zipで2つのコレクションを結合
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で入れ子構造を平坦化

7. flatten・flatMapで入れ子構造を平坦化
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で並び替え

8. sorted・sortedByで並び替え
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で累積計算

9. fold・reduceで累積計算
9. fold・reduceで累積計算

要素を順番に処理して1つの結果を作ります。


fun main() {
    val numbers = listOf(1, 2, 3)
    println(numbers.fold(0) { acc, n -> acc + n }) // 6
}

10. 自分で拡張関数を作る

10. 自分で拡張関数を作る
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
}

まとめ

まとめ
まとめ

Kotlinのコレクション操作を振り返ろう

この記事では、Kotlinにおけるコレクション操作について、初心者の方でも理解しやすいように順番に解説してきました。 リストや配列といったデータ構造は、プログラミングの中でも特に使用頻度が高く、扱い方を理解しているかどうかで、 コードの読みやすさや書きやすさが大きく変わってきます。

filtermapでは、条件で絞り込みを行ったり、データの形を変換したりする方法を学びました。 これは「必要な情報だけを取り出して加工する」という、実務でも非常によく使われる考え方です。 また、anyallnoneを使うことで、リスト全体に対する条件判定を、 短く分かりやすく書けることも確認しました。

重複を取り除くdistincttoSet、データを分類するgroupByは、 情報を整理して見やすくするために欠かせない操作です。 データが増えてくるほど、これらの操作のありがたみを実感できるようになります。 さらに、sumaveragecountによる集計処理や、 zipによる複数リストの結合など、実用的なコレクション操作も学びました。

後半では、入れ子構造を扱うflatten、並び替えを行うsortedsortedBy、 そして要素を順番にまとめて計算するfoldについても触れました。 最後に紹介した拡張関数は、「自分がよく使う処理を自分用にまとめる」というKotlinらしい考え方を体験できる内容でした。 これらを組み合わせることで、Kotlinのコレクション操作はより強力で柔軟なものになります。

まとめとしての簡単なサンプル


fun main() {
    val scores = listOf(60, 70, 80, 90)

    // 70点以上だけを抽出して平均を求める
    val average = scores
        .filter { it >= 70 }
        .average()

    println(average)
}

このサンプルでは、これまで学んだ内容を組み合わせています。 条件に合う要素をfilterで抽出し、その結果に対してaverageを使うことで、 無理なく自然な流れで処理を書けることが分かります。 Kotlinのコレクション操作は、このように「つなげて書ける」点が大きな特徴です。

先生と生徒の振り返り会話

生徒

「最初はリスト操作が難しそうだと思っていましたが、1つずつ見ていくと、 やっていること自体は意外とシンプルなんですね。」

先生

「そうですね。Kotlinのコレクション操作は、処理の意図がそのままコードに表れやすいのが特徴です。 何をしたいのかを日本語で考えてから書くと、自然と正しい形になりますよ。」

生徒

「filterで選んで、mapで加工して、必要なら集計する、という流れがだいぶ分かってきました。 以前よりコードが読みやすくなった気がします。」

先生

「それはとても良い感覚です。今回学んだコレクション操作は、 アプリ開発でも業務システムでも必ず使います。 まずは基本をしっかり身につけて、少しずつ慣れていきましょう。」

関連記事:
カテゴリの一覧へ
新着記事
New1
Kotlin
Kotlinのforループの基本!範囲・配列・コレクションの繰り返し処理
New2
Go言語
Go言語のスライスでappend時のメモリの仕組みを理解しよう!初心者でもわかる基礎解説
New3
Go言語
Go言語のスコープとは?ローカル変数・グローバル変数の違いと使い分け
New4
Go言語
Go言語のhttp.ResponseWriterとhttp.Requestの仕組みを理解しよう
人気記事
No.1
Java&Spring記事人気No1
Go言語
Go言語の関数パラメータ!値渡しと参照渡しの違いを理解しよう
No.2
Java&Spring記事人気No2
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.3
Java&Spring記事人気No3
Swift
Swiftで数値と文字列を相互変換!NumberFormatterで桁区切りや通貨表示をわかりやすく解説
No.4
Java&Spring記事人気No4
Kotlin
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
No.5
Java&Spring記事人気No5
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.6
Java&Spring記事人気No6
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.7
Java&Spring記事人気No7
Kotlin
Kotlinで画面遷移を実装しよう!初心者でもわかるIntentの使い方完全ガイド
No.8
Java&Spring記事人気No8
Swift
SwiftPMでのバージョン指定と互換性の考え方を初心者向けに徹底解説