Can non terminal operation mark stream as ordered without actually sorting it ?

Boaz Nahum boaznahum at
Sun Apr 7 08:55:39 PDT 2013


I have parallel unordered stream.

In some point I convert the stream to Pair<Integer, T> where *Integer  *is
index of element in stream.
It is quite clear that each element is assigned arbitrary index, but once
assigned I want it to be ordered by this index.

Sure I can do:

si.sequential().map((t)->new Pair<>(index.incrementAndGet(), t));

But I already learnt that I cant count on 'sequential()' ...   :)

Or sort it:>new Pair<>(index.incrementAndGet(), t)).sorted((t1,

But why pay the cost of sorting.

Or collect it to 'ordered' collection to protect 'sequential':
si.sequential().map((t)->new Pair<>(index.incrementAndGet(),

here I pay the price of allocation Collection to hold all elements.

What i really need is somethings like this:

si.*ordered*().map((t)->new Pair<>(index.incrementAndGet(), t));

But unlike 'sequential()/parallel()' It cant be global.

Does making stream 'ordered' as better/worse performance than converting it
to stream->collection->stream ?

I know it is rare use, But still I'm wondering.


More information about the lambda-dev mailing list