조용한 담장

코틀린(Kotlin) Collections : Retrieving Single Elements 본문

kotlin

코틀린(Kotlin) Collections : Retrieving Single Elements

iosroid 2020. 4. 6. 19:53

kotlin

코틀린의 collection 의 Retrieving Single Elements 에 대해 살펴보자.

원문 https://kotlinlang.org/docs/reference/collection-elements.html 을 보며 정리.

Retrieving by position

elementAt() 을 사용하여 collection 의 특정 위치의 element 를 얻는다.

첫번째 위치는 0, 마지막은 (size - 1) 이다.

indexed access operatorget()[] 도 비슷한 동작을 한다.

val numbers = linkedSetOf("one", "two", "three", "four", "five")
println(numbers.elementAt(3))    

val numbersSortedSet = sortedSetOf("one", "two", "three", "four")
println(numbersSortedSet.elementAt(0)) // elements are stored in the ascending order

// output:
// four
// four

first() 로 첫번째 element 를, last() 로 마지막 element를 얻는다.

val numbers = listOf("one", "two", "three", "four", "five")
println(numbers.first())    
println(numbers.last())    

// output:
// one
// five

잘못된 인덱스값으로 문제 상황을 피하기 위한 아래의 함수가 있다.

elementAtOrNull() collection 의 크기를 벗어나는 위치에 접근하면 null 을 리턴한다.

elementAtOrElse() 람다 함수를 인자로 받아 잘못된 위치에 접근하면 해당 위치 값에 대한 람다 함수의 결과를 리턴한다.

val numbers = listOf("one", "two", "three", "four", "five")
println(numbers.elementAtOrNull(5))
println(numbers.elementAtOrElse(5) { index -> "The value for index $index is undefined"})

// output:
// null
// The value for index 5 is undefined

Retrieving by condition

first()last() 에 predicate 를 사용하여 해당 element 에 대해 값이 true 인 경우의 값만 얻을 수 있다.

val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.first { it.length > 3 })
println(numbers.last { it.startsWith("f") })

// output:
// three
// five

predicate 에 해당하는 element 가 없으면 exception 을 발생하는데 이를 피하기 위해 null을 리턴 해주는 firstOrNull()lastOrNull() 함수가 있다.

val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.firstOrNull { it.length > 6 })

// output:
// null

firstOrNull(), lastOrNull() 와 같은 동작을 하지만 이름이 좀 더 명료한 find(), findLast() 를 사용할 수 있다.

val numbers = listOf(1, 2, 3, 4)
println(numbers.find { it % 2 == 0 })
println(numbers.findLast { it % 2 == 0 })

// output:
// 2
// 4

Random element

random() 를 이용하여 랜덤한 위치의 element 를 얻는다.

val numbers = listOf(1, 2, 3, 4)
println(numbers.random())

// output:
// 3

Checking existence

contains() 를 사용하여 element 가 collection 내에 있는지 확인한다.

containsAll() 는 argument collection 의 모든 element 가 포함되어 있는지 확인한다.

val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.contains("four"))
println("zero" in numbers)

println(numbers.containsAll(listOf("four", "two")))
println(numbers.containsAll(listOf("one", "zero")))

// output:
// true
// false
// true
// false

isEmpty()isNotEmpty() 를 사용하여 collection 이 비어있는지 확인한다.

val numbers = listOf("one", "two", "three", "four", "five", "six")
println(numbers.isEmpty())
println(numbers.isNotEmpty())

val empty = emptyList<String>()
println(empty.isEmpty())
println(empty.isNotEmpty())

// output:
// false
// true
// true
// false


Comments