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フィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- mapとflatMap:すべての要素を変換する
- filter、filterNot、partition
- fold、reduce、runningFold
- パイプラインのチェーンとSequenceによる中間リストの回避