Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

Kotlin辞典

  1. トップページ
  2. Kotlin辞典
  3. リスト — forEach() / forEachIndexed()

リスト — forEach() / forEachIndexed()

Kotlinの『forEach()』はリストの各要素に対してラムダを実行します。『forEachIndexed()』はインデックスと要素を同時に受け取れます。繰り返し処理の基本メソッドです。

構文
val fruits = listOf("りんご", "バナナ", "オレンジ")

// forEach — 各要素で処理を実行します。
fruits.forEach { println(it) }

// forEachIndexed — インデックスも使います。
fruits.forEachIndexed { index, fruit ->
    println("$index: $fruit")
}

// for ループと同等です。
for ((index, fruit) in fruits.withIndex()) {
    println("$index: $fruit")
}
メソッド一覧
メソッド概要
リスト.forEach { it }各要素に対してラムダを実行します。戻り値はありません(Unit)。
リスト.forEachIndexed { i, v -> }インデックスと要素を引数にラムダを実行します。
リスト.withIndex()インデックスと要素のペア(IndexedValue)のリストを返します。
リスト.onEach { it }forEach と同じですが、元のコレクション自身を返します(チェーン可能)。
マップ.forEach { (k, v) -> }マップのキーと値を分割して受け取ります。
サンプルコード
data class Student(val name: String, val score: Int)

fun main() {
    val students = listOf(
        Student("Alice", 85),
        Student("Bob", 72),
        Student("Carol", 91),
        Student("Dave", 68)
    )

    // 基本の forEach
    println("=== 成績一覧 ===")
    students.forEach { student ->
        println("${student.name}: ${student.score}点")
    }

    println()

    // forEachIndexed で番号付き出力
    println("=== 番号付き ===")
    students.forEachIndexed { index, student ->
        val rank = index + 1
        println("$rank 位 ${student.name}: ${student.score}点")
    }

    println()

    // マップでの forEach(キーと値を分割)
    val capitals = mapOf("日本" to "東京", "フランス" to "パリ", "アメリカ" to "ワシントンD.C.")
    println("=== 首都一覧 ===")
    capitals.forEach { (country, capital) ->
        println("$country の首都: $capital")
    }

    println()

    // onEach — forEach と同じですがチェーンできます。
    val names = students
        .onEach { println("処理中: ${it.name}") }
        .map { it.name }
    println("名前リスト: $names")

    println()

    // withIndex で for ループ
    println("=== withIndex ===")
    for ((i, s) in students.withIndex()) {
        println("[$i] ${s.name}")
    }
}
概要

『forEach()』は副作用(ログ出力・DBへの書き込みなど)を伴う処理に使います。変換結果が必要な場合は『map()』、条件に合う要素を絞り込む場合は『filter()』を使うと、意図がより明確になります。

『forEach』の中でループを抜け出したい場合は『return@forEach』でラムダからリターンできます(通常の『return』は外側の関数を返します)。ループを完全に中断するには『for』ループと『break』を使います。

リストの基本操作はリスト — 生成 / listOf() / mutableListOf()を、フィルタリングと変換はリスト — filter() / map()を参照してください。

記事の間違いや著作権の侵害等ございましたらお手数ですがまでご連絡頂ければ幸いです。