言語
日本語
English

Caution

お使いのブラウザはJavaScriptが無効になっております。
当サイトでは検索などの処理にJavaScriptを使用しています。
より快適にご利用頂くため、JavaScriptを有効にしたうえで当サイトを閲覧することをお勧めいたします。

Kotlin辞典

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

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

対応: Kotlin 1.0(2016)

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 { 条件 }条件に合う要素の数を返します。

サンプルコード

sample_list_find_any_all.kt
data class Employee(val name: String, val department: String, val salary: Int)

fun main() {
    val employees = listOf(
        Employee("五条悟", "開発", 720000),
        Employee("両面宿儺", "営業", 600000),
        Employee("虎杖悠仁", "開発", 480000),
        Employee("伏黒恵", "人事", 500000),
        Employee("釘崎野薔薇", "開発", 460000)
    )

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

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

    // 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}円)")
}
list_find_any_all.kt
kotlinc list_find_any_all.kt -include-runtime -d list_find_any_all.jar
java -jar list_find_any_all.jar
最初の開発社員: 五条悟
最後の開発社員: 釘崎野薔薇
マーケ社員: なし

年収70万以上がいるか: true
年収100万以上がいるか: false
全員年収30万以上: true
全員開発部門: false
赤字社員なし: true

開発部門の社員数: 3
開発部門最高年収: 五条悟(720000円)

概要

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

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

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

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