본문 바로가기
코딩테스트 준비(kotlin)/문법정리

kotlin - filter

by 1chanhue1 2024. 4. 22.

filter 함수는 컬렉션을 iteration 하면서 주어진 람다에 각 원소를 넘겨서 람다가 true를 반환하는(조건에 맞는) 원소만 필터링하는 기능을 합니다.

filter의 결과는, 입력 컬렉션의 원소 중에서 주어진 조건문에 만족하는 원소만으로 이루어진 새로운 컬렉션 입니다.

inline fun <T> Array<out T>.filter(
    predicate: (T) -> Boolean
): List<T>

inline fun <T> Array<out T>.filterIndexed(
    predicate: (index: Int, T) -> Boolean
): List<T>

inline fun <T, C : MutableCollection<in T>> Array<out T>.filterIndexedTo(
    destination: C,
    predicate: (index: Int, T) -> Boolean
): C

fun <reified R> Array<*>.filterIsInstance(): List<R>
(source)

fun <reified R, C : MutableCollection<in R>> Array<*>.filterIsInstanceTo(
    destination: C
): C

inline fun <T> Array<out T>.filterNot(
    predicate: (T) -> Boolean
): List<T>

fun <T : Any> Array<out T?>.filterNotNull(): List<T>

fun <C : MutableCollection<in T>, T : Any> Array<out T?>.filterNotNullTo(
    destination: C
): C

inline fun <T, C : MutableCollection<in T>> Array<out T>.filterNotTo(
    destination: C,
    predicate: (T) -> Boolean
): C

inline fun <T, C : MutableCollection<in T>> Array<out T>.filterTo(
    destination: C,
    predicate: (T) -> Boolean
): C
  • filter: predicate가 true를 반환하는 요소들만 담긴 리스트를 반환합니다.

  • filterIndexed: predicate의 인자가 index, value를 갖습니다. 나머지는 filter와 동일함

  • filterIsInstance: 지정된 타입 파라미터의 인스턴스인 모든 요소를 포함하는 목록을 반환합니다.
  • filterNot: predicate이 false를 반환하는 요소들만 담긴 리스트를 반환합니다.
  • filterNotNull: 배열의 요소 중 null이 아닌 요소들만 담긴 리스트를 반환합니다.
  • (filter, filterIndexed, filterIsInstance, filterNot, filterNotNull)To: 필터링된 요소들이 추가될 destination 배열을 지정할 수 있습니다.

 

 

 

 

 

fun main() {
    val numberArray: Array<Number> 
    	= arrayOf(1, 1.5f, 2.3, 100L, 14.5f, 6.6, Double.NaN)
    val array: Array<Int> 
    	= Array(10) { it + 1 }
    val containNullArray: Array<Int?> 
    	= arrayOf(1, null, 2, 3, 4, null, 10, null, 12)
    val destination: MutableList<Int>
    	= mutableListOf(10, 143, 12)

    val filter = array.filter { it > 5 }
    val filterIndexed = array.filterIndexed { idx, i -> idx > 5 }
    val filterIsInstance = numberArray.filterIsInstance<Double>()
    val filterNot = array.filterNot { it > 5 }
    val filterNotNull = containNullArray.filterNotNull()
    val filterTo = array.filterTo(destination) { it > 5 }

    println(filter) // [6, 7, 8, 9, 10]
    println(filterIndexed) // [7, 8, 9, 10]
    println(filterIsInstance) // [2.3, 6.6, NaN]
    println(filterNot) // [1, 2, 3, 4, 5]
    println(filterNotNull) // [1, 2, 3, 4, 10, 12]
    println(filterTo) // [10, 143, 12, 6, 7, 8, 9, 10]
}