Bird
Raised Fist0
Kotlinprogramming~10 mins

Filter and filterNot in Kotlin - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Filter and filterNot
Start with List
↓
Apply filter(predicate)
↓
Keep elements where predicate is TRUE
↓
Result: Filtered List
↓
Start with List
↓
Apply filterNot(predicate)
↓
Keep elements where predicate is FALSE
↓
Result: Filtered List
Filter keeps elements that match the condition (predicate true). FilterNot keeps elements that do NOT match the condition (predicate false).
Execution Sample
Kotlin
val numbers = listOf(1, 2, 3, 4, 5)
val evens = numbers.filter { it % 2 == 0 }
val notEvens = numbers.filterNot { it % 2 == 0 }
println(evens)
println(notEvens)
This code filters even numbers with filter and odd numbers with filterNot from a list.
Execution Table
StepElementPredicate (it % 2 == 0)filter ActionfilterNot Actionfilter OutputfilterNot Output
11falseExcludeInclude[][1]
22trueIncludeExclude[2][1]
33falseExcludeInclude[2][1, 3]
44trueIncludeExclude[2, 4][1, 3]
55falseExcludeInclude[2, 4][1, 3, 5]
End----[2, 4][1, 3, 5]
💡 All elements processed; filter keeps elements with predicate true; filterNot keeps elements with predicate false.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5Final
evens[][][2][2][2, 4][2, 4][2, 4]
notEvens[][1][1][1, 3][1, 3][1, 3, 5][1, 3, 5]
Key Moments - 2 Insights
Why does filter keep elements where the predicate is true, but filterNot keeps elements where the predicate is false?
filter includes elements when predicate returns true (see execution_table rows 2 and 4 where elements 2 and 4 are included). filterNot does the opposite, including elements when predicate returns false (see rows 1, 3, 5 where elements 1, 3, 5 are included).
What happens if the predicate always returns true?
filter will keep all elements, filterNot will keep none. This is because filter includes elements with predicate true, filterNot excludes them.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the value of 'evens' after processing element 4?
A[2, 4]
B[2]
C[4]
D[1, 3]
💡 Hint
Check the 'filter Output' column at Step 4 in the execution_table.
At which step does 'notEvens' first include an element?
AStep 2
BStep 3
CStep 1
DStep 5
💡 Hint
Look at the 'filterNot Output' column and see when it changes from empty to non-empty.
If the predicate was changed to 'it > 3', which element would be included first in 'evens'?
A2
B4
C5
D3
💡 Hint
Predicate 'it > 3' is true starting from element 4; check how filter includes elements based on predicate.
Concept Snapshot
filter(predicate): keeps elements where predicate is true
filterNot(predicate): keeps elements where predicate is false
Both return new lists without changing original
Use filter to select matching items, filterNot to exclude them
Predicate is a function returning true/false for each element
Full Transcript
This visual execution shows how Kotlin's filter and filterNot functions work on a list of numbers. Starting with the list [1, 2, 3, 4, 5], each element is tested with the predicate 'it % 2 == 0' which checks if a number is even. filter keeps elements where this predicate is true, so it includes 2 and 4. filterNot keeps elements where the predicate is false, so it includes 1, 3, and 5. The execution table traces each step, showing which elements are included or excluded. The variable tracker shows how the filtered lists build up after each element is processed. Key moments clarify why filter and filterNot behave oppositely. The quiz tests understanding of the step-by-step filtering process. The snapshot summarizes the main points: filter keeps elements matching the condition, filterNot keeps those that don't, both return new lists, and the predicate decides which elements to keep.

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

  1. Step 1: Understand the purpose of filter

    The filter function selects elements that satisfy a given condition (true).
  2. Step 2: Compare with other options

    Options B and D describe different operations, and C describes filterNot, not filter.
  3. Final Answer:

    Keeps items where the condition is true -> Option D
  4. Quick Check:

    filter = keep true items [OK]
Hint: Remember: filter keeps true, filterNot keeps false [OK]
Common Mistakes:
  • Confusing filter with filterNot
  • Thinking filter removes all items
  • Mixing filter with sorting functions
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

  1. Step 1: Identify the condition for even numbers

    Even numbers satisfy it % 2 == 0.
  2. Step 2: Choose correct filter syntax

    filter keeps items where condition is true, so numbers.filter { it % 2 == 0 } keeps even numbers.
  3. Final Answer:

    numbers.filter { it % 2 == 0 } -> Option C
  4. 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

  1. Step 1: Understand filterNot condition

    filterNot { it > 3 } keeps items where it > 3 is false, so items ≤ 3.
  2. Step 2: Apply condition to list

    Numbers 1, 2, 3 are ≤ 3, so they are kept; 4 and 5 are removed.
  3. Final Answer:

    [1, 2, 3] -> Option A
  4. 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

  1. Step 1: Analyze the filterNot condition

    filterNot { it % 2 == 0 } keeps items where it % 2 == 0 is false, so it keeps odd numbers.
  2. Step 2: Check intended output

    The code tries to get even numbers but actually keeps odd numbers, so logic is reversed.
  3. Final Answer:

    It incorrectly keeps odd numbers instead of even -> Option B
  4. 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

  1. Step 1: Identify condition for non-empty strings

    Non-empty strings satisfy it.isNotEmpty().
  2. Step 2: Choose correct filter usage

    filter keeps items where condition is true, so words.filter { it.isNotEmpty() } returns only non-empty words.
  3. Final Answer:

    words.filter { it.isNotEmpty() } -> Option A
  4. 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 unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard