フィルタリングとマッピング
コレクションを変換します
「フィルタリングとマッピング」はCoddyKit上の無料Kotlin Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはKotlin Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Kotlin Academyコースには全4レッスンが含まれています。
コレクションを変換する
Kotlinのコレクションには、豊富な関数型操作が用意されています。特によく使うのが、要素を選択するfilterと、要素を変換するmapです。これらは新しいコレクションを返し、元のコレクションを変更することはありません。
filter関数
filterは、述語を満たす要素だけを残し、新しいリストを返します。
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evens = numbers.filter { it % 2 == 0 }
println(evens)
}filterNotとfilterNotNull
filterNotは条件に一致しない要素を残します。filterNotNullはnull要素を削除し、nullでないリストを返します。
fun main() {
val nums = listOf(1, 2, 3, 4)
println(nums.filterNot { it > 2 })
val withNulls = listOf(1, null, 3, null)
println(withNulls.filterNotNull())
}filterIndexed
filterIndexedを使うと、述語内でインデックスと値の両方を利用できます。
fun main() {
val letters = listOf("a", "b", "c", "d")
val result = letters.filterIndexed { index, _ -> index % 2 == 0 }
println(result)
}map関数
mapはすべての要素に変換を適用し、変換結果からなる新しいリストを返します。結果の型は入力の型と異なっていても構いません。
fun main() {
val numbers = listOf(1, 2, 3)
val squares = numbers.map { it * it }
println(squares)
}別の型へのマッピング
mapを使うと要素の型を変更できます。たとえば、数値を文字列に変換できます。
fun main() {
val numbers = listOf(1, 2, 3)
val labels = numbers.map { "Item $it" }
println(labels)
}mapIndexed
mapIndexedは各要素とともにインデックスを提供するため、変換に位置情報を利用できます。
fun main() {
val fruits = listOf("apple", "banana", "cherry")
val numbered = fruits.mapIndexed { i, fruit -> "${i + 1}. $fruit" }
numbered.forEach { println(it) }
}mapNotNull
mapNotNullは各要素を変換し、結果がnullになる要素を除外します。マッピングとフィルタリングを組み合わせるすっきりした方法です。
fun main() {
val strings = listOf("1", "two", "3", "four")
val numbers = strings.mapNotNull { it.toIntOrNull() }
println(numbers)
}filterとmapのチェーン
これらの操作は自然に組み合わせられます。まずフィルタリングを行い、残った要素をマッピングするのが一般的なパターンです。
fun main() {
val numbers = listOf(1, 2, 3, 4, 5, 6)
val result = numbers
.filter { it % 2 == 0 }
.map { it * 10 }
println(result)
}操作によって元のコレクションは変更されない
filterとmapはどちらもまったく新しいリストを返します。元のコレクションは変更されないため、コードの安全性が高まり、動作も理解しやすくなります。
fun main() {
val original = listOf(1, 2, 3)
val doubled = original.map { it * 2 }
println("Original: $original")
println("Doubled: $doubled")
}実践でのフィルタリングとマッピング
filterとmapを組み合わせると、データパイプラインを宣言的に表現できます。インデックスを管理する手動のforループよりも、どのようにループするかではなく、何が欲しいかを記述できるため、コードが明確になります。
確認問題
filterとmapの違いは何ですか?
復習
filter(およびそのバリエーションであるfilterNot、filterIndexed、filterNotNull)を使って要素を選択し、map(およびmapIndexed、mapNotNull)を使って要素を変換する方法を学びました。これらはきれいにチェーンでき、元のコレクションを変更することはありません。次は、グループ化と分割を使ってデータを整理します。
よくある質問
「フィルタリングとマッピング」レッスンは無料ですか?
はい。「フィルタリングとマッピング」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Kotlin Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Kotlin Academyコースには全4レッスンが含まれています。
「フィルタリングとマッピング」で何を学びますか?
コレクションを変換します ブラウザで直接実行するハンズオンコードでKotlin Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Kotlin Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのKotlin Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「フィルタリングとマッピング」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このKotlin Academyレッスンでコードを書いて実行できますか?
はい。すべてのKotlin Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。