【Kotlin/Android】配列(list)から条件にマッチする要素を取得!findとfirstの違い

この記事からわかること

  • Kotlin/Android Studio配列(リスト)から条件マッチする要素取得する方法
  • find/findLastfirst/last違い
  • firstOrNull/lastOrNullの使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

環境

配列(list)から条件にマッチする要素を取得する方法

Kotlinで配列(コレクション)から条件にマッチする要素を取得するにはfindメソッドまたはfirstメソッドを使用します。両者の使い方と違いをまとめていきます。

findメソッド

公式リファレンス:findメソッド

inline fun <T> Array<out T>.find(
    predicate: (T) -> Boolean
): T?

findメソッドはコレクションから引数に渡した条件に最初にマッチする要素を取得するためのメソッドです。マッチするものがない場合nullが返ります。

引数に渡した条件に最後にマッチする要素を取得したい場合はfindLastを使用します。

val numbers = listOf(1, 2, 3, 4, 5, 6, 7)
val firstOdd = numbers.find { it % 2 != 0 }
val lastEven = numbers.findLast { it % 2 == 0 }
val result = numbers.find { it > 10 }

print(firstOdd) // 1
print(lastEven) // 6
print(result)   // null

first/lastメソッド

公式リファレンス:firstメソッド

fun <T> Array<out T>.first(): T
inline fun <T> Array<out T>.first(
    predicate: (T) -> Boolean
): T

firstメソッドは引数違いでただ単にコレクションの最初の要素を取得するものとfind同様にコレクションから引数に渡した条件に最初にマッチする要素を取得する2つがあります。マッチするものがない場合エラー:NoSuchElementExceptionが返ります。

引数に渡した条件に最後にマッチする要素を取得したい場合はlastを使用します。

val numbers = listOf(1, 2, 3, 4, 5, 6, 7)
val first = numbers.first()
val firstOdd = numbers.first { it % 2 != 0 }
val last = numbers.last()
val lastEven = numbers.last { it % 2 == 0 }
val result = numbers.first { it > 10 }
// java.util.NoSuchElementException: Collection contains no element matching the predicate.

print(first)    // 1
print(firstOdd) // 1
print(last)     // 7
print(lastEven) // 6

firstOrNull/lastOrNull

エラーを発生させたくない場合はfirstOrNull/lastOrNullを使用することで存在しなかった場合にnullを返させることができます。

val numbers: List<Int> = emptyList()
  
val first = numbers.firstOrNull()
val last = numbers.lastOrNull()

print(first)    // null
print(last)     // null

両者の違いまとめ

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index