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

この記事からわかること
- Kotlin/Android Studioで配列(リスト)から条件にマッチする要素を取得する方法
- find/findLastとfirst/lastの違い
- firstOrNull/lastOrNullの使い方
index
[open]
\ アプリをリリースしました /
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
配列(list)から条件にマッチする要素を取得する方法
Kotlinで配列(コレクション)から条件にマッチする要素を取得するにはfind
メソッドまたはfirst
メソッドを使用します。両者の使い方と違いをまとめていきます。
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メソッド
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
両者の違いまとめ
- find:マッチするものがなかった場合はnullを返す
- first:マッチするものがなかった場合はエラーを返す
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。