limit and skip in StreamOps

Deepak S Patwardhan deepak.patwardhan at
Sat Aug 4 06:51:17 PDT 2012


Consider the following class which represents an infinite stream of natural

public class Naturals implements Streamable<Integer> {

    private int current = 1;
    public Iterator<Integer> iterator() {
        return new Iterator<Integer>() {
            //.. hasNext() returns true
            //.. remove is unsupported

            @Override public Integer next() {
                return current ++;

To compute the sum of first 5 numbers, I have to write

Stream<Integer> sumStream = naturals.cumulate((x, y) -> x + y);
for (int i = 0; i < 4; i++);
int sum5 =;

Question 1) How about a (lazy) limit method in StreamOps which results in a
sized stream? I can then write
int sum5 = naturals.limit(5).reduce(0, (x, y) -> x + y);

Question 2) How about a (an eager) skip method in StreamOps which skips
elements in the stream? I can then write
int sum5 = naturals.cumulate((x, y) -> x + y).skip(4).next();

Although I have raised these in the context of infinite streams, I think
they would apply to sized streams as well.

Deepak S Patwardhan.

More information about the lambda-dev mailing list