Filter and filterNot help you pick items from a list based on a rule. They make it easy to keep or remove items you want.
You want to get only even numbers from a list of numbers.
You want to remove all empty strings from a list of words.
You want to find all students who passed an exam from a list.
You want to exclude all negative numbers from a list.
Syntax
Kotlin
val filteredList = list.filter { item -> condition }
val filteredNotList = list.filterNot { item -> condition }
filter keeps items where the condition is true.
filterNot keeps items where the condition is false.
Examples
This keeps only even numbers from the list.
Kotlin
val numbers = listOf(1, 2, 3, 4, 5)
val evens = numbers.filter { it % 2 == 0 }
This removes empty strings from the list.
Kotlin
val words = listOf("apple", "", "banana", "", "cherry")
val nonEmpty = words.filterNot { it.isEmpty() }
Sample Program
This program shows how to use filter and filterNot to split a list based on a condition.
Kotlin
fun main() {
val numbers = listOf(10, 15, 20, 25, 30)
val filtered = numbers.filter { it > 20 }
val filteredNot = numbers.filterNot { it > 20 }
println("Numbers greater than 20: $filtered")
println("Numbers NOT greater than 20: $filteredNot")
}
OutputSuccess
Important Notes
Use filter when you want to keep items matching a condition.
Use filterNot when you want to keep items NOT matching a condition.
Both return a new list and do not change the original list.
Summary
filter keeps items where the condition is true.
filterNot keeps items where the condition is false.
They help you easily select or exclude items from collections.
Practice
(1/5)
1. What does the filter function do in Kotlin collections?
easy
A. Sorts the collection in ascending order
B. Removes all items from the collection
C. Keeps items where the condition is false
D. Keeps items where the condition is true
Solution
Step 1: Understand the purpose of filter
The filter function selects elements that satisfy a given condition (true).
Step 2: Compare with other options
Options B and D describe different operations, and C describes filterNot, not filter.
Final Answer:
Keeps items where the condition is true -> Option D
2. Which of the following is the correct syntax to filter even numbers from a list numbers in Kotlin?
easy
A. numbers.filter { it / 2 == 0 }
B. numbers.filterNot { it % 2 == 0 }
C. numbers.filter { it % 2 == 0 }
D. numbers.filter { it % 2 != 0 }
Solution
Step 1: Identify the condition for even numbers
Even numbers satisfy it % 2 == 0.
Step 2: Choose correct filter syntax
filter keeps items where condition is true, so numbers.filter { it % 2 == 0 } keeps even numbers.
Final Answer:
numbers.filter { it % 2 == 0 } -> Option C
Quick Check:
filter with even condition = numbers.filter { it % 2 == 0 } [OK]
Hint: Use filter with condition true to keep desired items [OK]
Common Mistakes:
Using filterNot instead of filter
Using division instead of modulo
Confusing condition signs (== vs !=)
3. What is the output of this Kotlin code?
val nums = listOf(1, 2, 3, 4, 5)
val result = nums.filterNot { it > 3 }
println(result)
medium
A. [1, 2, 3]
B. [4, 5]
C. [1, 2, 3, 4, 5]
D. []
Solution
Step 1: Understand filterNot condition
filterNot { it > 3 } keeps items where it > 3 is false, so items ≤ 3.
Step 2: Apply condition to list
Numbers 1, 2, 3 are ≤ 3, so they are kept; 4 and 5 are removed.
Final Answer:
[1, 2, 3] -> Option A
Quick Check:
filterNot > 3 = keep ≤ 3 [OK]
Hint: filterNot keeps items where condition is false [OK]
Common Mistakes:
Confusing filterNot with filter
Including numbers greater than 3
Expecting empty list output
4. Find the error in this Kotlin code that tries to filter out odd numbers:
val numbers = listOf(1, 2, 3, 4, 5)
val evens = numbers.filterNot { it % 2 == 0 }
println(evens)
medium
A. The list is empty after filtering
B. It incorrectly keeps odd numbers instead of even
C. filterNot cannot be used with modulo operator
D. Syntax error in lambda expression
Solution
Step 1: Analyze the filterNot condition
filterNot { it % 2 == 0 } keeps items where it % 2 == 0 is false, so it keeps odd numbers.
Step 2: Check intended output
The code tries to get even numbers but actually keeps odd numbers, so logic is reversed.
Final Answer:
It incorrectly keeps odd numbers instead of even -> Option B
Quick Check:
filterNot with even condition keeps odd [OK]
Hint: filterNot reverses condition; use filter to keep true items [OK]
Common Mistakes:
Using filterNot instead of filter for positive condition
Assuming filterNot removes items instead of keeping false
Misreading modulo condition
5. Given a list val words = listOf("apple", "banana", "", "cherry", ""), which Kotlin expression returns a list of only the non-empty words using filter and filterNot correctly?
hard
A. words.filter { it.isNotEmpty() }
B. words.filterNot { it.isNotEmpty() }
C. words.filter { it.isEmpty() }
D. words.filterNot { it.length > 0 }
Solution
Step 1: Identify condition for non-empty strings
Non-empty strings satisfy it.isNotEmpty().
Step 2: Choose correct filter usage
filter keeps items where condition is true, so words.filter { it.isNotEmpty() } returns only non-empty words.
Final Answer:
words.filter { it.isNotEmpty() } -> Option A
Quick Check:
filter with isNotEmpty = keep non-empty [OK]
Hint: Use filter with positive condition to keep desired items [OK]
Common Mistakes:
Using filterNot with isNotEmpty to keep empty strings
Confusing isEmpty and isNotEmpty
Expecting filterNot to remove empty strings
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.