0Pricing
Kotlin Academy · レッスン

mapとflatMap:すべての要素を変換する

mapでコレクションを変換し、flatMapでネストした結果を平坦化します。

「mapとflatMap:すべての要素を変換する」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。

変換の基本

map は各要素に関数を適用し、同じ要素数の新しいコレクションを返します。flatMap も同様に処理しますが、リストのリストを平坦化して 1 つのリストにします。

map の基本

ラムダで各要素を変換します。結果の要素数は入力と同じです。

fun main() {
    val nums = listOf(1, 2, 3, 4)
    val squares = nums.map { it * it }
    println(squares) // [1, 4, 9, 16]
}

map で型を変更

出力要素の型は入力と異なっていてもかまいません。List<Int> を List<String> に変換できます。

fun main() {
    val nums = listOf(1, 2, 3)
    val labels = nums.map { "Item $it" }
    println(labels)
}

データクラスに対する map

各要素からプロパティを取り出し、データクラスをより単純な型に変換します。

data class User(val name: String, val age: Int)
fun main() {
    val users = listOf(User("Ada", 35), User("Ben", 22))
    val names = users.map { it.name }
    println(names) // [Ada, Ben]
}

map 呼び出しの連結

複数の map 呼び出しはスムーズに組み合わせられます。それぞれが直前の出力を変換します。

fun main() {
    val nums = listOf(1, 2, 3)
    val result = nums.map { it + 1 }.map { it * 10 }
    println(result) // [20, 30, 40]
}

flatMap の基本

flatMap は各要素に対してリストを返す関数を呼び出し、そのすべての結果を 1 つのリストに平坦化します。

fun main() {
    val words = listOf("hello", "world")
    val chars = words.flatMap { it.toList() }
    println(chars) // [h, e, l, l, o, w, o, r, l, d]
}

flatMap を使う場面

ラムダが自然にリストを生成し、リストのリストではなく平坦化された 1 つの結果が必要な場合に flatMap を使用してください。

data class Order(val items: List<String>)
fun main() {
    val orders = listOf(
        Order(listOf("pen", "book")),
        Order(listOf("lamp")),
        Order(listOf("mug", "ring"))
    )
    val allItems = orders.flatMap { it.items }
    println(allItems) // [pen, book, lamp, mug, ring]
}

List の map と flatMap

結果の型を比較してください。map は入れ子構造を維持し、flatMap はそれを取り除きます。

fun main() {
    val nums = listOf(1, 2, 3)
    val mapped = nums.map { listOf(it, it * 10) }
    val flat = nums.flatMap { listOf(it, it * 10) }
    println(mapped) // [[1, 10], [2, 20], [3, 30]]
    println(flat)   // [1, 10, 2, 20, 3, 30]
}

条件付きリストでの flatMap

除外したい要素に対して空のリストを返します。flatMap なら、フィルタリングと変換を 1 ステップで行えます。

fun main() {
    val nums = listOf(1, 2, 3, 4, 5)
    val doubled = nums.flatMap { if (it % 2 == 0) listOf(it, it * 2) else emptyList() }
    println(doubled) // [2, 4, 4, 8]
}

インデックス付き map

mapIndexed はラムダにインデックスと値の両方を渡します。

fun main() {
    val fruits = listOf("apple", "banana", "cherry")
    val labeled = fruits.mapIndexed { i, name -> "$i: $name" }
    println(labeled)
}

Sequence と List

非常に長い連結処理では、まず Sequence に変換して、中間リストの生成を避けてください。

fun main() {
    val big = (1..100).asSequence()
        .map { it + 1 }
        .filter { it % 5 == 0 }
        .map { it * 2 }
        .toList()
    println(big.take(5)) // first 5 results
}

クイックチェック

map と flatMap の主な違いは何ですか?

まとめ

map は各要素を変換します(要素数は同じで、型は変わる場合があります)。flatMap はリストを返す関数を適用し、そのすべての結果を連結します。mapIndexed と組み合わせればインデックスを扱え、長い遅延パイプラインでは Sequence に切り替えられます。

よくある質問

「mapとflatMap:すべての要素を変換する」レッスンは無料ですか?

はい。「mapとflatMap:すべての要素を変換する」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。

「mapとflatMap:すべての要素を変換する」で何を学びますか?

mapでコレクションを変換し、flatMapでネストした結果を平坦化します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Kotlin Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「mapとflatMap:すべての要素を変換する」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このKotlin Academyレッスンでコードを書いて実行できますか?

はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. mapとflatMap:すべての要素を変換する
  2. filter、filterNot、partition
  3. fold、reduce、runningFold
  4. パイプラインのチェーンとSequenceによる中間リストの回避
← Kotlin Academyに戻る