カテゴリ: Kotlin 更新日: 2025/08/31

Kotlinのflatten・flatMapの使い方!ネスト構造を平坦化するテクニック

Kotlinのflatten・flatMapの使い方!ネスト構造を平坦化するテクニック
Kotlinのflatten・flatMapの使い方!ネスト構造を平坦化するテクニック

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

生徒

「Kotlinで入れ子になったリストを1つにまとめる方法ってありますか?」

先生

「ありますよ。そんなときはflattenflatMapを使います。どちらもネストされた構造を平坦化できます。」

生徒

「flattenとflatMapって名前が似ていますが、どう違うんですか?」

先生

「簡単に言うと、flattenはそのまま平坦化、flatMapは加工しながら平坦化できるんです。具体例で説明しますね。」

1. flattenとは?

1. flattenとは?
1. flattenとは?

flattenは、ネスト(入れ子)になったコレクションを1つにまとめる関数です。例えば、List<List<Int>>List<Int>に変換します。


fun main() {
    val nestedList = listOf(
        listOf(1, 2, 3),
        listOf(4, 5),
        listOf(6)
    )
    val flatList = nestedList.flatten()
    println(flatList)
}

[1, 2, 3, 4, 5, 6]

このように、入れ子構造がなくなり、すべての要素が1つのリストにまとめられます。

2. flattenの実用例

2. flattenの実用例
2. flattenの実用例

例えば、クラスごとの生徒リストを1つにまとめたい場合に便利です。


fun main() {
    val classA = listOf("田中", "佐藤")
    val classB = listOf("鈴木", "高橋")
    val classC = listOf("伊藤")
    val allStudents = listOf(classA, classB, classC).flatten()
    println(allStudents)
}

[田中, 佐藤, 鈴木, 高橋, 伊藤]

クラス単位のリストをまとめて、全生徒リストを作ることができます。

3. flatMapとは?

3. flatMapとは?
3. flatMapとは?

flatMapは、各要素を加工(変換)したあとに平坦化できる関数です。flattenより柔軟な使い方ができます。


fun main() {
    val sentences = listOf(
        "Kotlin is fun",
        "I love programming"
    )
    val words = sentences.flatMap { it.split(" ") }
    println(words)
}

[Kotlin, is, fun, I, love, programming]

ここでは文字列を単語に分割し、全ての単語を1つのリストにまとめています。

4. flatMapの実用例:商品名とバリエーション

4. flatMapの実用例:商品名とバリエーション
4. flatMapの実用例:商品名とバリエーション

商品ごとにサイズや色の組み合わせを作るときに便利です。


fun main() {
    val products = listOf("Tシャツ", "パーカー")
    val variations = products.flatMap { product ->
        listOf("${product} - S", "${product} - M", "${product} - L")
    }
    println(variations)
}

[Tシャツ - S, Tシャツ - M, Tシャツ - L, パーカー - S, パーカー - M, パーカー - L]

このようにflatMapは、加工しながらリストを展開するのに最適です。

5. flattenとflatMapの使い分け

5. flattenとflatMapの使い分け
5. flattenとflatMapの使い分け
  • flatten:そのまま平坦化したいとき
  • flatMap:加工や変換をしながら平坦化したいとき

例えば、生徒名簿をまとめるだけならflatten、名簿を整形しながらまとめたいならflatMapが適しています。

カテゴリの一覧へ
新着記事
Go言語の構造体でインターフェースを実装する方法を初心者向けにやさしく解説!
Kotlinの演算子一覧と使い方!算術・比較・論理演算子の基本を解説
Go言語の文字列フォーマット!fmt.Sprintfで簡単に出力を整形する方法
Go言語のエラーと例外の違いを初心者向けに整理!わかりやすく解説
人気記事
No.1
Kotlin・Go・Swift記事の人気No1
Swiftのwhile文とrepeat while文を完全マスター!初心者にもわかる繰り返し処理の使い方と違い
No.2
Kotlin・Go・Swift記事の人気No2
Swift入門ガイド|基本構文と書き方をマスターしよう
No.3
Kotlin・Go・Swift記事の人気No3
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.4
Kotlin・Go・Swift記事の人気No4
Kotlinの正規表現(Regex)の使い方をやさしく解説!文字列操作の基本を初心者向けに学ぼう
No.5
Kotlin・Go・Swift記事の人気No5
Kotlinのwhen式を完全ガイド!初心者でもわかるパターンマッチング的な使い方
No.6
Kotlin・Go・Swift記事の人気No6
Kotlinで画面を作る!レイアウトXMLとビューの基本操作をやさしく解説
No.7
Kotlin・Go・Swift記事の人気No7
Kotlinのコンパニオンオブジェクトとは?初心者向けに使い方と役割をわかりやすく解説!
No.8
Kotlin・Go・Swift記事の人気No8
Swiftのオプショナル型とは?初心者でもわかる使い方とアンラップの基礎