map、filter、forEach
ラムダでコレクションを変換します。
「map、filter、forEach」はCoddyKit上の無料Android Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはAndroid Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Android Academyコースには全4レッスンが含まれています。
コレクション操作
Kotlinのコレクションには、強力な組み込み操作が用意されています。特に頻繁に使うのが map、filter、forEach の3つです。
これらを使うと、手作業でループを書く代わりに、データの変換、選択、反復処理を1行で明確に表現できます。
mapで各要素を変換する
map は、すべての要素に変換を適用して新しいリストを作成します。
ラムダの中では、it が現在の要素を表します。元のリストは変更されません。
fun main() {
val nums = listOf(1, 2, 3)
val doubled = nums.map { it * 2 }
println(doubled)
}mapで型を変更できる
map の結果は、入力と同じ型である必要はありません。
ここでは、名前のリストをそれぞれの長さのリストに変換しています。
fun main() {
val names = listOf("Ada", "Linus")
val lengths = names.map { it.length }
println(lengths)
}filterで条件に一致する要素を残す
filter は、ラムダが true を返す要素だけを含む新しいリストを返します。
ここでは偶数だけを残しています。
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val evens = nums.filter { it % 2 == 0 }
println(evens)
}文字列に対するfilter
条件には、Booleanを返すものであれば何でも指定できます。ここでは長い単語だけを残しています。
条件に合わない要素は、結果からそのまま除外されます。
fun main() {
val words = listOf("hi", "hello", "hey", "howdy")
val long = words.filter { it.length > 3 }
println(long)
}forEachで処理を実行する
forEach はすべての要素に対してコードブロックを実行しますが、新しいリストは作成しません。
出力やログ記録などの副作用を起こす処理に使います。
fun main() {
val fruits = listOf("apple", "banana")
fruits.forEach { println("Fruit: $it") }
}mapとforEachの違い
map は変換後のリストを返すため、結果が必要な場合に使います。
forEach は利用できる結果を返さないため、処理を実行する場合だけ使います。適切な方を選ぶと、コードが分かりやすくなります。
操作を連結する
これらの操作はコレクションを返すため、互いに連結できます。
左から右に読みます。まず filter を行い、残った要素に対して map を行います。
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val result = nums.filter { it % 2 == 0 }.map { it * 10 }
println(result)
}パラメーターに名前を付ける
it の代わりにラムダのパラメーターへ名前を付けると、特に操作を連結したときに分かりやすくなります。
矢印を使います。{ name -> ... }
fun main() {
val prices = listOf(10, 25, 5)
val withTax = prices.map { price -> price + price / 10 }
println(withTax)
}forEachIndexed
位置も必要な場合は、forEachIndexed を使います。インデックスと要素が渡されます。
これにより、カウンターを手動で管理する必要がなくなります。
fun main() {
val tasks = listOf("eat", "code", "rest")
tasks.forEachIndexed { i, task ->
println("$i: $task")
}
}実際の処理に組み合わせる
これらの操作を組み合わせると、データパイプラインを簡潔に表現できます。ここでは、長い名前の長さの合計を求めています。
ほとんど自然な文章のように読めます。
fun main() {
val names = listOf("Ada", "Grace", "Bo")
val total = names.filter { it.length > 2 }.map { it.length }.sum()
println(total)
}クイックチェック
コレクション操作についての理解度を確認しましょう。
まとめ
map は各要素を変換して新しいリストを作り、filter は条件に一致する要素を残し、forEach は要素ごとに処理を実行します。
これらはコレクションを返すため、連結して読みやすいデータパイプラインを構築できます。
よくある質問
「map、filter、forEach」レッスンは無料ですか?
はい。「map、filter、forEach」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Android Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Android Academyコースには全4レッスンが含まれています。
「map、filter、forEach」で何を学びますか?
ラムダでコレクションを変換します。 ブラウザで直接実行するハンズオンコードでAndroid Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Android Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのAndroid Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「map、filter、forEach」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このAndroid Academyレッスンでコードを書いて実行できますか?
はい。すべてのAndroid Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。