0Pricing
Kotlin Academy · レッスン

コレクション内のデータクラス

マップとセットで使用します

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

データクラスとコレクション

データクラスには値に基づくequalsとhashCodeがあるため、コレクション内で適切に動作します。

このレッスンでは、リスト、セット、Mapでデータクラスがどのように動作するかを学びます。

リスト内のデータクラス

データオブジェクトをリストに格納し、ほかの要素と同じように反復処理できます。

読みやすいtoStringにより、簡単に出力できます。

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

fun main() {
    val users = listOf(User("Alice", 30), User("Bob", 25))
    for (u in users) println(u)
}

containsは値で動作する

equalsは値を比較するため、containsは別のインスタンスであっても等しいオブジェクトを見つけます。

まったく同じ参照である必要はありません。

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

fun main() {
    val users = listOf(User("Alice", 30))
    println(users.contains(User("Alice", 30)))
}

Setで重複を削除する

SetはequalsとhashCodeを使って重複を拒否します。

同じ値を持つ2つのデータオブジェクトは、同じ要素として扱われます。

data class Point(val x: Int, val y: Int)

fun main() {
    val set = setOf(Point(1, 1), Point(1, 1), Point(2, 2))
    println(set.size)
}

Mapのキーとしてのデータクラス

データクラスは値の等価性に基づいて検索できるため、Mapのキーに最適です。

その場でキーオブジェクトを作成しても、格納された値を見つけることができます。

data class Coord(val x: Int, val y: Int)

fun main() {
    val grid = mapOf(Coord(0, 0) to "start", Coord(1, 1) to "goal")
    println(grid[Coord(1, 1)])
}

Mapの値としてのデータクラス

もちろん、データクラスを値として使うこともできます。idをキーにした、豊富な情報を持つレコードをモデル化できます。

これはメモリ上で検索を行う場合によく使われる形です。

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

fun main() {
    val byId = mapOf(1 to User("Alice", 30))
    println(byId[1]?.name)
}

コレクションのフィルタリング

データクラスとfilterなどのコレクション関数を組み合わせて、データを検索できます。

ラムダからプロパティに直接アクセスできます。

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

fun main() {
    val users = listOf(User("A", 20), User("B", 40))
    val adults = users.filter { it.age >= 30 }
    println(adults)
}

プロパティへの変換

mapを使うと、オブジェクトのコレクションを1つのプロパティだけのコレクションに変換できます。

必要なデータだけを取り出せます。

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

fun main() {
    val users = listOf(User("Alice", 30), User("Bob", 25))
    val names = users.map { it.name }
    println(names)
}

プロパティによるグループ化

groupByを使うと、リストを指定したプロパティをキーとするMapに変換できます。

ここではユーザーを都市ごとにグループ化しています。

data class User(val name: String, val city: String)

fun main() {
    val users = listOf(User("A", "Paris"), User("B", "Paris"), User("C", "Rome"))
    val byCity = users.groupBy { it.city }
    println(byCity["Paris"]?.size)
}

イミュータブルに項目を更新する

イミュータブルなリスト内の項目を更新するには、リストをmapし、一致する要素に対してcopyを使用します。

その結果、1つのオブジェクトだけが変更された新しいリストが作成されます。

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

fun main() {
    val users = listOf(User("Alice", 30), User("Bob", 25))
    val updated = users.map { if (it.name == "Bob") it.copy(age = 26) else it }
    println(updated)
}

まとめ

データクラスはコレクションの要素に最適です。

  • containsとSetは値に基づいて動作します
  • 安全で比較可能なMapのキーを作成できます
  • filter、map、groupByと自然に組み合わせられます
  • copyによってイミュータブルな更新が可能になります
data class User(val name: String, val age: Int)

fun main() {
    val users = setOf(User("Alice", 30), User("Alice", 30))
    println(users.size)
    println(users.map { it.name })
}

理解度チェック

コレクション内のデータクラスについての理解度を確認しましょう。

まとめ

コレクション内でのデータクラスの動作について学びました。

  • 値の等価性により、contains、Set、Mapのキーが機能します
  • filter、map、groupByと組み合わせられます
  • copyでイミュータブルな更新を行えます

これで「データクラスと分解宣言」コースは完了です。

よくある質問

「コレクション内のデータクラス」レッスンは無料ですか?

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

「コレクション内のデータクラス」で何を学びますか?

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

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

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

「コレクション内のデータクラス」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

  1. データクラスの宣言
  2. copyとequals
  3. 分解宣言
  4. コレクション内のデータクラス
← Kotlin Academyに戻る