filter, filterNot 및 partition
조건식 기반 함수로 요소를 나누고 선택해 보세요.
filter, filterNot 및 partition은(는) CoddyKit의 무료 Kotlin Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Kotlin Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
선택 연산
필터링은 조건자와 일치하는 요소를 남깁니다. filterNot은 일치하지 않는 요소를 남깁니다. 분할은 컬렉션을 한 번에 두 목록으로 나눕니다.
기본 필터링
filter { ... }는 조건자가 참인 요소만 포함하는 새 목록을 반환합니다.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val evens = nums.filter { it % 2 == 0 }
println(evens) // [2, 4, 6]
}filterNot
filterNot { ... }은 그 반대입니다. 조건자가 거짓인 요소를 남깁니다. 조건자를 반전한 것과 같은 결과지만 의도가 더 분명합니다.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val odds = nums.filterNot { it % 2 == 0 }
println(odds) // [1, 3, 5]
}분할
partition은 Pair를 반환합니다. 일치하는 요소가 먼저 오고 일치하지 않는 요소가 나중에 옵니다. 데이터를 두 번 순회하지 않아도 됩니다.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val (evens, odds) = nums.partition { it % 2 == 0 }
println("evens=$evens odds=$odds")
}데이터 클래스 분할
레코드 목록을 한 번의 순회로 두 그룹으로 나눕니다.
data class User(val name: String, val active: Boolean)
fun main() {
val users = listOf(User("Ada", true), User("Ben", false), User("Cal", true))
val (active, inactive) = users.partition { it.active }
println("active=${active.map { it.name }}")
println("inactive=${inactive.map { it.name }}")
}filterIndexed
조건자는 인덱스와 값을 모두 받으므로 위치가 중요할 때 유용합니다.
fun main() {
val nums = listOf(10, 20, 30, 40, 50)
val every2nd = nums.filterIndexed { i, _ -> i % 2 == 0 }
println(every2nd) // [10, 30, 50]
}filterIsInstance
특정 타입의 요소만 남기며, 내부에서 스마트 캐스트가 적용됩니다.
fun main() {
val mixed: List<Any> = listOf(1, "hello", 2.0, "world", 3)
val onlyStrings = mixed.filterIsInstance<String>()
println(onlyStrings) // [hello, world]
}filterNotNull
널을 허용하는 목록에서 null 항목을 제거하여 null이 아닌 요소의 목록을 반환합니다.
fun main() {
val mixed: List<String?> = listOf("a", null, "b", null, "c")
val nonNull = mixed.filterNotNull()
println(nonNull) // [a, b, c]
}필터링과 매핑 연결하기
filter와 map을 조합하여 선택과 변환으로 이루어진 처리 흐름을 구성하십시오.
data class Product(val name: String, val price: Double, val inStock: Boolean)
fun main() {
val products = listOf(
Product("Pen", 1.0, true),
Product("Book", 12.0, false),
Product("Lamp", 25.0, true)
)
val availableNames = products.filter { it.inStock }.map { it.name }
println(availableNames) // [Pen, Lamp]
}명확성을 위한 filterNot 사용
때로는 filterNot { it.isActive }가 filter { !it.isActive }보다 읽기 쉽습니다.
data class Task(val title: String, val done: Boolean)
fun main() {
val tasks = listOf(Task("Email", true), Task("Lunch", false), Task("Code", true))
val pending = tasks.filterNot { it.done }
println(pending) // [Task(title=Lunch, done=false)]
}분할은 목록을 반환합니다
partition에서 반환된 Pair에는 일반 목록 두 개가 들어 있습니다. 구조 분해하거나 .first / .second로 접근할 수 있습니다.
fun main() {
val nums = (1..10).toList()
val result = nums.partition { it > 5 }
println("above 5: ${result.first}")
println("below 6: ${result.second}")
}분할과 두 번의 필터링 호출 비교
두 하위 집합이 모두 필요하다면 partition이 더 빠릅니다. 두 번이 아니라 한 번만 순회하기 때문입니다.
fun main() {
val nums = (1..10).toList()
// Two passes:
val a = nums.filter { it > 5 }
val b = nums.filter { it <= 5 }
// One pass:
val (c, d) = nums.partition { it > 5 }
println("$a $b")
println("$c $d")
}빠른 확인
한 번의 순회로 일치하는 요소와 일치하지 않는 요소를 BOTH 반환하는 함수는 무엇입니까?
복습
필터링은 일치하는 요소를 선택하고, filterNot은 일치하지 않는 요소를 선택하며, 분할은 두 그룹을 한 번에 반환합니다. 타입으로 요소를 남기려면 filterIsInstance를 사용하고, null을 제거하려면 filterNotNull을 사용하십시오. 선택과 변환을 함께 수행하려면 map과 연결하십시오.
자주 묻는 질문
“filter, filterNot 및 partition” 강의는 무료인가요?
네 — “filter, filterNot 및 partition” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Kotlin Academy 강의 전체를 잠금 해제할 수 있습니다. Kotlin Academy 강의에는 총 4개의 강의가 포함되어 있습니다.
“filter, filterNot 및 partition”에서 뭘 배우나요?
조건식 기반 함수로 요소를 나누고 선택해 보세요. 브라우저에서 직접 실행하는 실습 코드로 Kotlin Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Kotlin Academy을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Kotlin Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.
“filter, filterNot 및 partition” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Kotlin Academy 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Kotlin Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- map과 flatMap: 모든 요소 변환하기
- filter, filterNot 및 partition
- fold, reduce 및 runningFold
- 파이프라인 연결하고 Sequence로 중간 목록 피하기