본문 바로가기
코틀린/[Elements] 요소 작업

[Kotlin][Collection] elementAt / elementAtOrElse / elementAtOrNull

by jinwo_o 2024. 8. 19.

지정된 인덱스에 있는 요소를 반환하거나 인덱스가 이 컬렉션의 범위를 벗어나면 IndexOutOfBoundsException을 발생시킵니다.

public fun <T> Iterable<T>.elementAt(index: Int): T {
    if (this is List)
        return get(index)
    return elementAtOrElse(index) { throw IndexOutOfBoundsException("Collection doesn't contain element at index $index.") }
}


val list = listOf(1, 2, 3)
println(list.elementAt(0)) // 1
println(list.elementAt(2)) // 3
// list.elementAt(3) // will fail with IndexOutOfBoundsException

val emptyList = emptyList<Int>()
// emptyList.elementAt(0) // will fail with IndexOutOfBoundsException

 

주어진 인덱스에 있는 요소를 반환하거나, 인덱스가 이 컬렉션의 범위를 벗어나면 defaultValue 함수를 호출한 결과를 반환합니다.

public fun <T> Iterable<T>.elementAtOrElse(index: Int, defaultValue: (Int) -> T): T {
    contract {
        callsInPlace(defaultValue, InvocationKind.AT_MOST_ONCE)
    }
    if (this is List)
        return this.getOrElse(index, defaultValue)
    if (index < 0)
        return defaultValue(index)
    val iterator = iterator()
    var count = 0
    while (iterator.hasNext()) {
        val element = iterator.next()
        if (index == count++)
            return element
    }
    return defaultValue(index)
}


val list = listOf(1, 2, 3)
println(list.elementAtOrElse(0) { 42 }) // 1
println(list.elementAtOrElse(2) { 42 }) // 3
println(list.elementAtOrElse(3) { 42 }) // 42

val emptyList = emptyList<Int>()
println(emptyList.elementAtOrElse(0) { "no int" }) // no int

 

지정된 인덱스에 있는 요소를 반환하거나 인덱스가 이 컬렉션의 범위를 벗어나면 null 을 반환합니다.

public fun <T> Iterable<T>.elementAtOrNull(index: Int): T? {
    if (this is List)
        return this.getOrNull(index)
    if (index < 0)
        return null
    val iterator = iterator()
    var count = 0
    while (iterator.hasNext()) {
        val element = iterator.next()
        if (index == count++)
            return element
    }
    return null
}


val list = listOf(1, 2, 3)
println(list.elementAtOrNull(0)) // 1
println(list.elementAtOrNull(2)) // 3
println(list.elementAtOrNull(3)) // null

val emptyList = emptyList<Int>()
println(emptyList.elementAtOrNull(0)) // null

 

elementAt - Kotlin Programming Language

 

kotlinlang.org

 

elementAtOrElse - Kotlin Programming Language

 

kotlinlang.org

 

elementAtOrNull - Kotlin Programming Language

 

kotlinlang.org