먼저 first, last 메서드를 알아보겠습니다.
리스트의 처음과 끝의 값을 가져오는 간단한 기능입니다.
val list = listOf(1, 2, 3) println(list.first()) // 1 println(list.last()) // 3
firstOrNull 공식 문서입니다.
# kotlin.text fun CharSequence.firstOrNull(): Char? (source) inline fun CharSequence.firstOrNull( predicate: (Char) -> Boolean ): Char? (source) # kotlin.collections fun <T> Array<out T>.firstOrNull(): T? (source) inline fun <T> Array<out T>.firstOrNull( predicate: (T) -> Boolean ): T? (source)
lastOrNull 공식 문서입니다.
# kotlin.text fun CharSequence.lastOrNull(): Char? (source) inline fun CharSequence.lastOrNull( predicate: (Char) -> Boolean ): Char? (source)
# kotlin.collections fun <T> Array<out T>.lastOrNull(): T? (source) inline fun <T> Array<out T>.lastOrNull( predicate: (T) -> Boolean ): T? (source)
firstOrNull이나 lastOrNull을 단순하게 쓰면 그다지 의미가 없습니다.
val list = listOf(1, 2, 3) println(list.firstOrNull()) // 1 println(list.lastOrNull()) // 3
물론 값이 비어 있으면 오류를 사전에 방지해 줍니다.
var emptyString = "" println(emptyString.first()) Exception in thread "main" java.util.NoSuchElementException: Char sequence is empty.
var emptyString = "" println(emptyString.firstOrNull()) // null
조건이 추가되면 더욱 유용하게 활용할 수 있습니다.
원래 조건에 맞는 값이 없다면, 오류가 발생합니다.
val list = listOf(1, 2, 3) println(list.first{ it < 1 }) Exception in thread "main" java.util.NoSuchElementException: List contains no element matching the predicate.
firstOrNull을 사용하면 오류가 발생하지 않고 null값이 떨어집니다.
lastOrNull도 마찬가지 입니다.
val list = listOf(1, 2, 3) println(list.firstOrNull{ it > 3 }) // null
val list = listOf(1, 2, 3) println(list.lastOrNull{ it < 1 }) // null
아래 페이지에서 자세한 내용을 확인할 수 있습니다.