반응형
배열과 관련돼서 알아보다가 예전에 알아봤던 기능과 굉장히 흡사한 스타일의 컬렉션 함수가 보여서 알아보았다. 다들 이름 그대로 매우 직관적인 기능들을 갖고 있고, 조건도 넣을 수 있기 때문에 때때로 편리하게 사용할 수 있을 것 같다.
first() | first(predicate: (T) → Boolean)
val myArray = arrayOf("Android", "Kotlin", "Solution", "Blog", "Tistory", "Looooooooog")
Log.d(TAG, "firstTest: ${myArray.first()}")
Log.d(TAG, "firstTest: ${myArray.first { value -> value.length < 5 }}")
Log.d(TAG, "firstTest: ${myArray.first { value -> value.length > 10 }}")
// Android
// Blog
// Looooooooog
first()는 해당 배열의 첫 번째 인자를 반환한다. 단, 반환된 값이 null일 경우에는 NoSuchElementException이 발생한다.
firstOrNull() | firstOrNull(predicate: (T) → Boolean)
val myArray = arrayOf("Android", "Kotlin", "Solution", "Blog", "Tistory", "Looooooooog")
Log.d(TAG, "firstOrNullTest: ${myArray.firstOrNull()}")
Log.d(TAG, "firstOrNullTest: ${myArray.firstOrNull { value -> value.length < 5 }}")
Log.d(TAG, "firstOrNullTest: ${myArray.firstOrNull { value -> value.length > 11 }}")
// Android
// Blog
// null
first() 동일하지만 first()와는 다르게 null 값도 반환받는다.
last() | last(predicate: (T) → Boolean)
Log.d(TAG, "lastTest: ${myArray.last()}")
Log.d(TAG, "lastTest: ${myArray.last { value -> value.length < 5 }}")
Log.d(TAG, "lastTest: ${myArray.last { value -> value.length > 10 }}")
// Looooooooog
// Blog
// Looooooooog
first()와 반대이다.
lastOrNull() | lastOrNull(predicate: (T) → Boolean)
Log.d(TAG, "lastOrNullTest: ${myArray.lastOrNull()}")
Log.d(TAG, "lastOrNullTest: ${myArray.lastOrNull { value -> value.length < 5 }}")
Log.d(TAG, "lastOrNullTest: ${myArray.lastOrNull { value -> value.length > 11 }}")
// Looooooooog
// Blog
// null
마찬가지로 firstOrNull()와 반대이다.
예시에서는 조건으로 모두 length만 사용했는데, 변수 타입에 맞는 다른 조건들도 사용 가능하다. 예를 들면 타입이 String일 때 contains()를 사용해서 특정 문자가 포함되어 있는 인자를 반환받거나 equals()를 사용해 일치하는 인자를 찾거나 하는 식이다.
배열에 조건부 코드를 짤 때는 보통 반복문과 함께 사용했었는데 이것들을 사용하면 반복문이나 조건문을 줄일 수 있을 것 같다. 물론 어떤 게 더 적게 리소스를 사용하는지 까지는 모르겠지만... 그건 시간이 날 때 후에 테스트해보거나 하자.
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/
반응형
'Android (Kotlin)' 카테고리의 다른 글
[Android/안드로이드] JVM, JDK,JRE 얘들은 뭐지? (0) | 2022.09.16 |
---|---|
[Android/안드로이드] JSON, GSON 정리 (0) | 2022.09.06 |
[Android/안드로이드] TODO(), error() (0) | 2022.08.31 |
[Android/안드로이드] 코틀린 require, requireNotNull, check, checkNotNull 이건 뭐지? (0) | 2022.08.30 |
[Android/안드로이드] 위치 서비스(GPS) 기능 설정 팝업 (2) | 2022.08.26 |
최근댓글