Re: RFR[8238286]: 'Add new flatMap stream operation that is more amenable to pushing’
Peter Levart
peter.levart at gmail.com
Sun Jul 5 08:44:25 UTC 2020
Hi Patric, Julia,
On 7/2/20 6:45 PM, Patrick Concannon wrote:
> http://cr.openjdk.java.net/~pconcannon/8238286/webrevs/webrev.03/ <http://cr.openjdk.java.net/~pconcannon/8238286/webrevs/webrev.03/>
Then I'd like to discuss cancelation (shortcut Streams). Currently
mapMulti does not do anything to optimize processing if the downstream
decides it does not need more elements but just keeps pushing. This is a
decision I guess to keep the API surface clean and simple. All
short-cutting ops or even intermediate (like limit) must therefore
ignore the surplus elements that are emitted by mapMulti and they do so.
If the intermediate operations up-stream mapMulti are respecting the
cancelation, this results in at most one invocation of mapMulti function
producing surplus elements, but if they don't, then multiple invocations
of mapMulti function is producing surplus elements.
For example:
someStream
.mapMulti((e, sink) -> { .... sink.accept(x); ... })
.filter(x -> ...)
.mapMulti((x, sink) -> { ... sink.accept(y); ...})
.limit(10)
...
Here the 1st mapMulti emits elements and each of them is filtered and
then maybe passed to 2nd mapMulti. the 2nd mapMulti could skip calling
its function if the downstream limit(10) has already passed 10 elements.
WDYT?
Regards, Peter
More information about the core-libs-dev
mailing list