Caution

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

Kotlin辞典

  1. トップページ
  2. Kotlin辞典
  3. リスト — find() / first() / any() / all()

リスト — find() / first() / any() / all()

Kotlinの『find()』は条件に合う最初の要素を返します(なければnull)。『any()』は条件に合う要素が1つでもあればtrue、『all()』は全要素が条件を満たすときtrue、『none()』は1つもないときtrueを返します。

構文
val numbers = listOf(1, 2, 3, 4, 5)

// find — 条件に合う最初の要素(なければ null)
val first = numbers.find { it > 3 }     // 4
val notFound = numbers.find { it > 10 } // null

// first — 条件に合う最初の要素(なければ例外)
val f = numbers.first { it > 3 }        // 4

// any / all / none — 条件チェック
val hasEven = numbers.any { it % 2 == 0 }  // true
val allPos  = numbers.all { it > 0 }        // true
val noNeg   = numbers.none { it < 0 }       // true
メソッド一覧
メソッド概要
リスト.find { 条件 }条件に合う最初の要素を返します。なければ null を返します。
リスト.findLast { 条件 }条件に合う最後の要素を返します。なければ null を返します。
リスト.first { 条件 }条件に合う最初の要素を返します。なければ NoSuchElementException をスローします。
リスト.firstOrNull { 条件 }条件に合う最初の要素を返します。なければ null を返します(find と同等)。
リスト.last { 条件 }条件に合う最後の要素を返します。なければ例外をスローします。
リスト.any { 条件 }条件に合う要素が1つ以上あれば true を返します。
リスト.all { 条件 }全要素が条件を満たすなら true を返します。
リスト.none { 条件 }条件に合う要素が1つもないなら true を返します。
リスト.count { 条件 }条件に合う要素の数を返します。
サンプルコード
data class Employee(val name: String, val department: String, val salary: Int)

fun main() {
    val employees = listOf(
        Employee("Alice", "開発", 600000),
        Employee("Bob", "営業", 450000),
        Employee("Carol", "開発", 720000),
        Employee("Dave", "人事", 500000),
        Employee("Eve", "開発", 580000)
    )

    // find — 最初に条件を満たす社員
    val firstDev = employees.find { it.department == "開発" }
    println("最初の開発社員: ${firstDev?.name}")  // Alice

    // findLast — 最後に条件を満たす社員
    val lastDev = employees.findLast { it.department == "開発" }
    println("最後の開発社員: ${lastDev?.name}")  // Eve

    // find が null を返す場合
    val marketing = employees.find { it.department == "マーケ" }
    println("マーケ社員: ${marketing?.name ?: "なし"}")  // なし

    println()

    // any — 条件を満たす社員がいるか
    println("年収70万以上がいるか: ${employees.any { it.salary >= 700000 }}")  // true
    println("年収100万以上がいるか: ${employees.any { it.salary >= 1000000 }}")  // false

    // all — 全員が条件を満たすか
    println("全員年収30万以上: ${employees.all { it.salary >= 300000 }}")  // true
    println("全員開発部門: ${employees.all { it.department == "開発" }}")  // false

    // none — 条件を満たす社員が1人もいないか
    println("赤字社員なし: ${employees.none { it.salary <= 0 }}")  // true

    println()

    // count — 条件を満たす件数
    val devCount = employees.count { it.department == "開発" }
    println("開発部門の社員数: $devCount")  // 3

    // first / last(例外あり)
    val highestDev = employees.filter { it.department == "開発" }.maxByOrNull { it.salary }
    println("開発部門最高年収: ${highestDev?.name}(${highestDev?.salary}円)")
}
概要

『find()』と『firstOrNull()』は同等ですが、Kotlinでは『find()』の方がよく使われます。一方、『first()』は要素が必ず存在するとわかっている場合に使い、存在しない場合は例外がスローされます。

『any()』『all()』『none()』は短絡評価(ショートサーキット)で動作します。例えば『any()』は条件に合う要素を見つけた時点でtrueを返し、以降の要素は検査しません。

フィルタリングと変換はリスト — filter() / map()を、ソートはリスト — sortedBy() / sortedWith()を参照してください。

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