filter, filterNot e partition
Divida e selecione elementos usando funções baseadas em predicados.
filter, filterNot e partition é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.
Operações de seleção
filter mantém os elementos que correspondem a um predicado. filterNot mantém os que NÃO correspondem. partition divide a coleção em duas listas de uma só vez.
filter básico
filter { ... } retorna uma nova lista contendo apenas os elementos para os quais o predicado é verdadeiro.
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 { ... } é o inverso: mantém os elementos para os quais o predicado é falso. O resultado é o mesmo de inverter o predicado, mas a intenção fica mais clara.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val odds = nums.filterNot { it % 2 == 0 }
println(odds) // [1, 3, 5]
}partition
partition retorna um Pair: primeiro os elementos correspondentes e depois os não correspondentes. Isso evita duas passagens pelos dados.
fun main() {
val nums = listOf(1, 2, 3, 4, 5, 6)
val (evens, odds) = nums.partition { it % 2 == 0 }
println("evens=$evens odds=$odds")
}partition com classe de dados
Divida uma lista de registros em dois grupos em uma única passagem.
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
O predicado recebe o índice e o valor — útil quando a posição é importante.
fun main() {
val nums = listOf(10, 20, 30, 40, 50)
val every2nd = nums.filterIndexed { i, _ -> i % 2 == 0 }
println(every2nd) // [10, 30, 50]
}filterIsInstance
Mantenha apenas os elementos de um tipo específico — as conversões inteligentes de tipo funcionam internamente.
fun main() {
val mixed: List<Any> = listOf(1, "hello", 2.0, "world", 3)
val onlyStrings = mixed.filterIsInstance<String>()
println(onlyStrings) // [hello, world]
}filterNotNull
Remova as entradas nulas de uma lista de valores que podem ser nulos — retorna uma lista de elementos não nulos.
fun main() {
val mixed: List<String?> = listOf("a", null, "b", null, "c")
val nonNull = mixed.filterNotNull()
println(nonNull) // [a, b, c]
}Encadeamento de filter e map
Combine filter e map para criar cadeias de seleção e transformação.
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]
}Negação com filterNot para maior clareza
Às vezes, filterNot { it.isActive } é mais legível do que 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 retorna listas
O Pair de partition contém duas listas comuns — desestruture-as ou acesse-as por meio de .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 versus duas chamadas de filter
Se precisar dos dois subconjuntos, partition será mais rápido — uma passagem em vez de duas.
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")
}Verificação rápida
Qual função retorna AMBOS os elementos correspondentes e não correspondentes em uma única passagem?
Recapitulação
filter seleciona correspondências; filterNot seleciona não correspondências; partition retorna os dois grupos em uma única passagem. Use filterIsInstance para manter elementos de um tipo e filterNotNull para descartar valores nulos. Encadeie com map para realizar seleção e transformação.
Aprenda Kotlin com um tutor de IA — grátis
Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.
- Cursos
- 51
- Aulas
- 203
Perguntas Frequentes
A aula “filter, filterNot e partition” é grátis?
Sim — o texto completo de “filter, filterNot e partition” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.
O que vou aprender em “filter, filterNot e partition”?
Divida e selecione elementos usando funções baseadas em predicados. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Kotlin Academy?
Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “filter, filterNot e partition”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Kotlin Academy?
Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- map e flatMap: transformando cada elemento
- filter, filterNot e partition
- fold, reduce e runningFold
- Encadeando pipelines e evitando listas intermediárias com Sequence