コレクション内のデータクラス
マップとセットで使用します
「コレクション内のデータクラス」は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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- データクラスの宣言
- copyとequals
- 分解宣言
- コレクション内のデータクラス