0Pricing
Kotlin Academy · レッスン

関連付けと平坦化

associateとflatMapを学びます

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

関連付けと平坦化

コレクションを扱う強力なツールをさらに2つ紹介します。associateファミリーの関数はリストからマップを作成し、flatMap/flattenは入れ子になったコレクションを1つのフラットなコレクションに変換します。

associateWith関数

associateWithは各要素をキーとして使い、ラムダ式でその値を計算してMapを生成します。

fun main() {
    val words = listOf("a", "bb", "ccc")
    val lengths = words.associateWith { it.length }
    println(lengths)
}

associateBy関数

associateByはその逆です。各要素からキーを計算し、要素自体を値として保持します。

data class User(val id: Int, val name: String)

fun main() {
    val users = listOf(User(1, "Ann"), User(2, "Bob"))
    val byId = users.associateBy { it.id }
    println(byId[2]?.name)
}

associate関数

汎用的なassociateでは、各要素に対してPairを返すことで、キーと値の両方を一度に構築できます。

fun main() {
    val names = listOf("Ann", "Bob", "Cy")
    val map = names.associate { it to it.length }
    println(map)
}

重複するキー

associate関数で2つの要素が同じキーを生成した場合は、最後の要素が優先されます。すべての要素を保持する必要がある場合は、キーが一意になるようにしてください。

fun main() {
    val words = listOf("apple", "ant", "bee")
    val byFirst = words.associateBy { it.first() }
    println(byFirst)
}

flatten関数

flattenはコレクションのコレクションを受け取り、1つのフラットなリストに結合します。

fun main() {
    val nested = listOf(listOf(1, 2), listOf(3, 4), listOf(5))
    val flat = nested.flatten()
    println(flat)
}

flatMap関数

flatMapは各要素をコレクションにマッピングし、その後、すべてのコレクションを1つのリストに平坦化します。mapとflattenを1つの手順で行う処理です。

fun main() {
    val words = listOf("hi", "ok")
    val chars = words.flatMap { it.toList() }
    println(chars)
}

入れ子になったデータへのflatMap

flatMapは、入れ子になった構造を1つの要素列に展開するのに適しています。

data class Team(val members: List<String>)

fun main() {
    val teams = listOf(Team(listOf("Ann", "Bob")), Team(listOf("Cy")))
    val everyone = teams.flatMap { it.members }
    println(everyone)
}

flatMapとmap

各要素から必ず1つの結果が生成される場合はmapを使います。各要素からコレクションが生成され、それらをすべて1つのフラットなリストに結合したい場合はflatMapを使います。

fun main() {
    val numbers = listOf(1, 2, 3)
    val mapped = numbers.map { listOf(it, it * 10) }
    val flat = numbers.flatMap { listOf(it, it * 10) }
    println("map: $mapped")
    println("flatMap: $flat")
}

associateとflatMapの組み合わせ

これらのツールはデータパイプラインで一緒に使われることがよくあります。入れ子になったデータを平坦化してから、すばやくアクセスできる検索用マップに関連付けます。

data class Order(val items: List<String>)

fun main() {
    val orders = listOf(Order(listOf("pen", "ink")), Order(listOf("pen")))
    val counts = orders.flatMap { it.items }.groupingBy { it }.eachCount()
    println(counts)
}

それぞれの使いどころ

リストからすばやく検索できるマップを作成するにはassociateBy/associateWithを使い、入れ子になったコレクションをまとめるにはflatMap/flattenを使います。構造化データを簡潔かつ明確に扱えるようになります。

クイックチェック

flatMapは何をしますか?

復習

associate、associateBy、associateWith(重複するキーがある場合は最後の要素が優先されます)を使ってマップを作成し、flattenとflatMapを使って入れ子構造を平坦化する方法を学びました。これで、データの変換、整理、集約、再構成に必要なコレクションのツールキットが完成しました。

よくある質問

「関連付けと平坦化」レッスンは無料ですか?

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

「関連付けと平坦化」で何を学びますか?

associateとflatMapを学びます ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「関連付けと平坦化」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. フィルタリングとマッピング
  2. グループ化と分割
  3. 集約
  4. 関連付けと平坦化
← Kotlin Academyに戻る