Updated SotL/L documents for Iteration 2
brian.goetz at oracle.com
Mon Sep 10 10:51:51 PDT 2012
We're now almost finished prototyping Iteration 2 of the Lambda
Libraries APIs; they are still in an experimental branch in the openjdk
lambda repo (it2-bootstrap), but will be moved into the default branch
(still of the lambda repo) in the next few days.
The attached documents describe the approach taken in Iteration 2, and
the changes since Iteration 1. There are still plenty of open issues to
discuss, and I'll be discussing them on the EG list.
Several significant API changes between Iterations 1 and 2:
- In Iteration 1, stream operations were injected directly into
Iterable; now Stream is its own entity, which is much more like an
Iterator rather than an Iterable.
- There are now stream "accessor" methods on Collection and friends;
instead of sayng collection.filter(...)..., you now have to say
collection.stream().filter(...) or collection.parallel().filter(...).
- The multiplicity of interfaces (Stream, StreamOps, Streamable,
ParallelStream, ParallelStreamable, etc) has been collapsed
dramatically, down to one Stream interface for each shape (list-shaped,
map-shaped). The serial/parallel-ness of a stream is now a dynamic
rather than static property.
- Most terminal operations are performed by forEach'ing elements into
a "sink" rather than pulling elements from an Iterator.
- There is an extensible API for adding new stream operations besides
the built-in ones, although this API will likely not be exposed in JDK 8
(needs more bake time.)
As usual, the implementation and API are in varying states of
"done"-ness; the general shape and set of operations is fairly baked,
but many of the implementation details and internal APIs (such as
StreamAccessor, ParallelOp, ParallelHelper) are mostly stabs in the
dark, and there are bits we know we have to fix that have just not yet
been fixed as we've been focusing on the high-order bits.
Start with Stream, MapStream and Streamable -- that's most of the
exposed API right there (and the most baked part.)
More information about the lambda-dev