Bird
Raised Fist0
Kotlinprogramming~20 mins

Java streams vs Kotlin sequences - Practice Questions

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Streams and Sequences Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
Output of Java Stream vs Kotlin Sequence Lazy Evaluation

Consider the following Kotlin code using a Sequence and a Java Stream. What will be the output?

Kotlin
val list = listOf(1, 2, 3, 4)

val seq = list.asSequence()
    .map {
        println("Sequence map: $it")
        it * 2
    }
    .filter {
        println("Sequence filter: $it")
        it > 4
    }

println("Sequence result: ${seq.toList()}")
A
Sequence map: 1
Sequence map: 2
Sequence map: 3
Sequence map: 4
Sequence filter: 2
Sequence filter: 4
Sequence filter: 6
Sequence filter: 8
Sequence result: [6, 8]
B
Sequence map: 1
Sequence filter: 2
Sequence map: 2
Sequence filter: 4
Sequence map: 3
Sequence filter: 6
Sequence result: [6]
C
Sequence map: 1
Sequence filter: 2
Sequence map: 2
Sequence filter: 4
Sequence map: 3
Sequence filter: 6
Sequence map: 4
Sequence filter: 8
Sequence result: [6, 8]
D
Sequence map: 1
Sequence filter: 2
Sequence map: 2
Sequence filter: 4
Sequence map: 3
Sequence filter: 6
Sequence map: 4
Sequence filter: 8
Sequence result: [2, 4, 6, 8]
Attempts:
2 left
💡 Hint

Remember that Kotlin Sequence operations are lazy and process elements one by one.

🧠 Conceptual
intermediate
1:30remaining
Difference in Evaluation Strategy Between Java Streams and Kotlin Sequences

Which statement best describes the difference between Java Streams and Kotlin Sequences?

AKotlin Sequences process elements lazily one by one, while Java Streams may process elements in batches or eagerly depending on the terminal operation.
BBoth Java Streams and Kotlin Sequences process elements eagerly by default.
CJava Streams are always lazy, while Kotlin Sequences are always eager.
DJava Streams process elements one by one lazily, but Kotlin Sequences process all elements eagerly before any operation.
Attempts:
2 left
💡 Hint

Think about how each handles intermediate operations and when elements are processed.

🔧 Debug
advanced
1:30remaining
Why Does This Kotlin Sequence Code Not Print Anything?

Look at this Kotlin code using a Sequence. Why does it not print anything?

Kotlin
val seq = sequenceOf(1, 2, 3)
    .map {
        println("Mapping $it")
        it * 2
    }

// No terminal operation here
ABecause <code>map</code> is executed immediately but the output is buffered and not printed.
BBecause <code>println</code> inside <code>map</code> is ignored in sequences.
CBecause <code>sequenceOf</code> creates an empty sequence by default.
DBecause <code>map</code> is not called until a terminal operation is invoked on the sequence.
Attempts:
2 left
💡 Hint

Think about when lazy operations run in Kotlin Sequences.

📝 Syntax
advanced
1:30remaining
Identify the Syntax Error in Java Stream Code

Which option contains a syntax error in this Java Stream code snippet?

Kotlin
List<Integer> numbers = List.of(1, 2, 3, 4);

var result = numbers.stream()
    .map(n -> n * 2)
    .filter(n -> n > 4)
    .collect(Collectors.toList());
A
var result = numbers.stream()
    .map(n -&gt; n * 2)
    .filter(n -&gt; n &gt; 4)
    .collect(Collectors.toList
B
var result = numbers.stream()
    .map(n -&gt; n * 2)
    .filter(n -&gt; n &gt; 4)
    .collect(Collectors.toList());
C
;))(tsiLot.srotcelloC(tcelloc.    
)4 &gt; n &gt;- n(retlif.    
)2 * n &gt;- n(pam.    
)(maerts.srebmun = tluser rav
D
ar result = numbers.stream()
    .map(n -&gt; n * 2)
    .filter(n -&gt; n &gt; 4)
    .collect(Collectors.toList());
Attempts:
2 left
💡 Hint

Look carefully at the parentheses and method calls.

🚀 Application
expert
2:30remaining
Choosing Between Java Streams and Kotlin Sequences for Large Data Processing

You need to process a very large list of data with multiple transformations and filters. Which approach is best to minimize memory usage and why?

AUse Java Streams because they always process elements eagerly, which is faster for large data.
BUse Kotlin Sequences because they process elements lazily one by one, reducing memory overhead.
CUse Kotlin Sequences because they convert the entire list to a new list before processing, improving speed.
DUse Java Streams because they store all intermediate results in memory, which reduces CPU usage.
Attempts:
2 left
💡 Hint

Think about lazy processing and memory consumption.

Practice

(1/5)
1. Which statement best describes the main similarity between Java streams and Kotlin sequences?
easy
A. Both provide lazy evaluation to process collections efficiently.
B. Both are eager and process all elements immediately.
C. Both are only available in Kotlin.
D. Both require manual iteration over collections.

Solution

  1. Step 1: Understand lazy evaluation concept

    Lazy evaluation means processing elements only when needed, not all at once.
  2. Step 2: Compare Java streams and Kotlin sequences

    Both Java streams and Kotlin sequences use lazy evaluation to improve performance when processing collections.
  3. Final Answer:

    Both provide lazy evaluation to process collections efficiently. -> Option A
  4. Quick Check:

    Lazy evaluation = Both streams and sequences [OK]
Hint: Remember: streams and sequences delay processing until needed [OK]
Common Mistakes:
  • Thinking both are eager by default
  • Assuming Kotlin sequences are only in Java
  • Believing manual iteration is required
2. Which of the following is the correct way to create a Kotlin sequence from a list?
easy
A. val seq = list.stream()
B. val seq = list.toStream()
C. val seq = Sequence(list)
D. val seq = list.asSequence()

Solution

  1. Step 1: Recall Kotlin sequence creation syntax

    In Kotlin, you convert a collection to a sequence using the asSequence() extension function.
  2. Step 2: Check each option

    val seq = list.stream() uses Java stream syntax, val seq = Sequence(list) is invalid constructor usage, val seq = list.toStream() is not a Kotlin function.
  3. Final Answer:

    val seq = list.asSequence() -> Option D
  4. Quick Check:

    Use asSequence() to get Kotlin sequence [OK]
Hint: Use asSequence() to convert collections in Kotlin [OK]
Common Mistakes:
  • Using Java stream() method in Kotlin
  • Trying to instantiate Sequence directly
  • Using non-existent toStream() method
3. What is the output of the following Kotlin code?
val list = listOf(1, 2, 3, 4)
val result = list.asSequence()
    .filter { it % 2 == 0 }
    .map { it * 2 }
    .toList()
println(result)
medium
A. [4, 8]
B. [1, 2, 3, 4]
C. [1, 3]
D. [2, 4, 6, 8]

Solution

  1. Step 1: Apply filter to keep even numbers

    Filter keeps elements where it % 2 == 0, so from [1,2,3,4] we get [2,4].
  2. Step 2: Map each filtered element by multiplying by 2

    Mapping [2,4] with it * 2 gives [4,8].
  3. Final Answer:

    [4, 8] -> Option A
  4. Quick Check:

    Filter evens then double = [4, 8] [OK]
Hint: Filter first, then map for correct sequence output [OK]
Common Mistakes:
  • Mapping before filtering
  • Confusing filter condition
  • Expecting original list output
4. Identify the error in this Kotlin code using sequences:
val numbers = listOf(1, 2, 3)
val seq = numbers.asSequence()
val result = seq.filter { it > 1 }
println(result)
medium
A. Filter condition syntax is invalid.
B. Incorrect use of asSequence() on a list.
C. Missing terminal operation to trigger sequence evaluation.
D. Cannot print a sequence directly.

Solution

  1. Step 1: Understand sequence evaluation

    Kotlin sequences are lazy and require a terminal operation like toList() to execute.
  2. Step 2: Check code for terminal operation

    The code filters but does not collect or convert the sequence, so result is still a sequence, not a list.
  3. Final Answer:

    Missing terminal operation to trigger sequence evaluation. -> Option C
  4. Quick Check:

    Sequences need terminal operation to run [OK]
Hint: Always end sequences with terminal operation like toList() [OK]
Common Mistakes:
  • Assuming filter runs immediately
  • Trying to print sequence without conversion
  • Confusing asSequence() usage
5. You want to process a large list of numbers in Kotlin, doubling only the odd numbers, but you want to avoid processing the entire list eagerly. Which approach is best?
1) Use list.map { if (it % 2 != 0) it * 2 else it }
2) Use list.asSequence().filter { it % 2 != 0 }.map { it * 2 }.toList()
3) Use list.stream().filter { it % 2 != 0 }.map { it * 2 }.collect(Collectors.toList())
4) Use list.asSequence().map { if (it % 2 != 0) it * 2 else it }.toList()
hard
A. Option 1 because map is simple and eager.
B. Option 2 because sequences filter and map lazily, processing only needed elements.
C. Option 3 because Java streams are faster in Kotlin.
D. Option 4 because it maps lazily but does not filter.

Solution

  1. Step 1: Understand lazy processing need

    To avoid eager processing of the entire list, lazy evaluation is needed.
  2. Step 2: Analyze each option's behavior

    Option 1 is eager map, processes all elements. Option 2 uses Kotlin sequences with filter and map lazily, then collects. Option 3 uses Java streams but in Kotlin context, less idiomatic. Option 4 maps lazily but does not filter, so processes all elements (conditionally doubling only odds).
  3. Step 3: Choose best approach

    Option 2 best fits lazy processing of only odd numbers, avoiding unnecessary work.
  4. Final Answer:

    Option 2 because sequences filter and map lazily, processing only needed elements. -> Option B
  5. Quick Check:

    Lazy filter + map with sequences = Option 2 [OK]
Hint: Use sequences with filter then map for lazy selective processing [OK]
Common Mistakes:
  • Using eager map on entire list
  • Ignoring lazy evaluation benefits
  • Confusing Java streams with Kotlin sequences
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