Search code examples
javajava-streamjava-9

How is takeWhile different from filter?


How is takeWhile() different from filter() in Java 9? What extra utility does it have?

Stream
    .of(1,2,3,4,5,6,7,8,9,10)
    .filter(i -> i < 4 )
    .forEach(System.out::println);

This is perhaps what following would do

Stream
    .of(1,2,3,4,5,6,7,8,9,10)
    .takeWhile(i -> i < 4 )
    .forEach(System.out::println);

What was the need of this new function then?


Solution

  • filter will remove all items from the stream that do not satisfy the condition.

    takeWhile will abort the stream on the first occurrence of an item which does not satisfy the condition.

    e.g.

    Stream.of(1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1)
        .filter(i -> i < 4 )
        .forEach(System.out::print);
    

    will print

    123321

    but

    Stream.of(1,2,3,4,5,6,7,8,9,10,9,8,7,6,5,4,3,2,1)
        .takeWhile(i -> i < 4 )
        .forEach(System.out::print);
    

    will print

    123