0Pricing
Android Academy · レッスン

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フィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. リストと可変リスト
  2. マップとセット
  3. map、filter、forEach
  4. ラムダと高階関数
← Android Academyに戻る