기초개념/코틀린
코틀린 필터링 관련 함수
131 developer
2022. 5. 16. 11:08
List<String> 에서의 필터 사용
val dinnerList = listOf("Pizza", "Risotto", "Pasta", "Hamburger")
Filter
dinnerList.filter {
it.startsWith("P")
}
// [Pizza, Pasta]
먼저 가장 기초가 되는 filter이다. Boolean 값에 따라 필터링을 할지 안 할지 결정한다. 위의 경우에는 “P”로 시작하는 항목만 true이고, 이 값들만 필터링된다.
FilterNot
dinnerList.filterNot {
it == "Pizza"
}
// [Risotto, Pasta, Hamburger]
filterNot은 말 그대로 조건이 아닌 경우에만 남길 때 사용하는 함수이다. 가독성이 걱정될 때 적절히 사용하면 로직을 보기 좋게 정리할 수 있을 것이다.
FilterIndexed
dinnerList.filterIndexed { index, s ->
index == 3
}
// [Hamburger]
인덱스를 통해 처리하고 싶을 때에는 filterIndexed를 통해 인덱스와 값을 각각 받을 수 있다.
List<Any?> 에서의 필터 사용
리스트에 null이 포함되어 있는 경우를 살펴보자.
val diNullList = listOf("Pizza", null, "Risotto", "Pasta", "Hamburger")
FilterNotNull
Notnull String에서 사용할 수 있는 it.startsWith("P") 와 같은 함수를 사용할 수 없어 컴파일되지 않을 것이다.
아래 예제는 간단한 예제이므로 it?.startsWith("P") ?: false 와 같이 사용할 수도 있지만, 필터를 통해 null값인 경우를 제외하고 시작할 수도 있다. filterNotNull 을 사용하면 null 값을 제외한 List를 반환받는다. 이 리스트를 가지고 다시 필터링 할 수 있다.
diNullList.filterNotNull().filter {
it.startsWith("P")
}
// [Pizza, Pasta]
FilterIsInstance
Any? 리스트가 있을 때 역시 String에서만 사용하는 함수를 사용할 수 없다.
val diNullList = listOf("Pizza", null, "Risotto", 100, "Pasta", "Hamburger")
Int가 포함되어 있기 때문에 filter 안에서 if (it is String)과 같은 if문을 한번 거치게 된다. 매번 타입 체크를 하게 된다면 참 번거로운 일일테니 필터로 걸러주자.
diNullList.filterIsInstance<String>().filter {
it.startsWith("P")
}
참고