コレクションとMapキーで使うData Class
構造的等価性を活用し、data classを集合やマップで使用します。
「コレクションとMapキーで使うData Class」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
値オブジェクトとしてのデータクラス
通常のクラス:不適切なマップキー
class Key(val id: Int) // no equals/hashCode
val map = mutableMapOf<Key, String>()
val k1 = Key(1)
val k2 = Key(1) // same id, different object
map[k1] = "value"
println(map[k2]) // null! k2 != k1 by referenceデータクラス:正しいマップキー
data class Key(val id: Int)
val map = mutableMapOf<Key, String>()
val k1 = Key(1)
val k2 = Key(1)
map[k1] = "value"
println(map[k2]) // "value"! Equal by valueセット内のデータクラス
data class Tag(val name: String)
val tags = mutableSetOf<Tag>()
tags.add(Tag("kotlin"))
tags.add(Tag("kotlin")) // duplicate
tags.add(Tag("java"))
println(tags.size) // 2 (not 3)データクラスで groupBy
data class Category(val name: String, val parent: String)
val items = listOf(
"List" to Category("Collections", "stdlib"),
"Map" to Category("Collections", "stdlib"),
"Flow" to Category("Coroutines", "kotlinx")
)
val grouped = items.groupBy { it.second }
println(grouped.keys.size) // 2Map による出現回数のカウント
data class Pair2(val x: Int, val y: Int)
val points = listOf(Pair2(1,2), Pair2(1,2), Pair2(3,4))
val counts = points.groupingBy { it }.eachCount()
println(counts) // {Pair2(x=1, y=2)=2, Pair2(x=3, y=4)=1}ネストしたデータクラス
data class Address(val city: String, val country: String)
data class Person(val name: String, val address: Address)
val p1 = Person("Alice", Address("Berlin", "DE"))
val p2 = Person("Alice", Address("Berlin", "DE"))
println(p1 == p2) // trueデータクラスで sortedBy
data class Student(val name: String, val grade: Double)
val students = listOf(
Student("Bob", 3.2),
Student("Alice", 3.8),
Student("Charlie", 2.9)
)
println(students.sortedBy { it.grade })データクラスとキャッシュ
data class CacheKey(val userId: Long, val resourceType: String)
val cache = HashMap<CacheKey, ByteArray>()
val key = CacheKey(42, "avatar")
cache[key] = byteArrayOf(1, 2, 3)
println(cache[CacheKey(42, "avatar")] != null) // trueデータクラスで distinct
data class Event(val type: String, val ts: Long)
val events = listOf(
Event("click", 1000),
Event("click", 1000), // duplicate
Event("scroll", 2000)
)
println(events.distinct().size) // 2イミュータブルなキーはより安全
data class ImmutableKey(val id: Int) // val properties only
// DON'T: data class MutableKey(var id: Int) // changing id breaks map!クイックチェック
まとめ
よくある質問
「コレクションとMapキーで使うData Class」レッスンは無料ですか?
はい。「コレクションとMapキーで使うData Class」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「コレクションとMapキーで使うData Class」で何を学びますか?
構造的等価性を活用し、data classを集合やマップで使用します。 ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。
「コレクションとMapキーで使うData Class」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Data Classの基本:自動生成されるメソッド
- copy()と部分的なオーバーライドによるコピー
- componentNによる分割代入宣言
- コレクションとMapキーで使うData Class