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?
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