"Cancelable" streams

Brian Goetz brian.goetz at oracle.com
Sat Dec 8 11:50:30 PST 2012


> How often is the BooleanSupplier called?

This is a tradeoff of responsiveness for overhead.  It could be as often 
as every element; it could be as infrequently as starting every new split.

> Can one implement a BooleanSupplier that depended on the number of
> elements generated?  (Or would you just use a lazy range method instead?)

With some user responsibility for thread-safety, yes.  For example:

   Collection answers = new ThreadSafeCollection();
   stream.cancelOn(() -> answers.size() >= 10), () -> {})
         .filter(...)
         .forEach(answers::add);

It would be the user's responsibility to ensure that access to the 
shared data is properly protected.

> Doesn't cancellation occur as soon as the supplier returns false?  If
> so, what's the advantage of an onCancel method?

The onCancel lambda is so that there can be a feedback mechanism by 
which the client can answer "did my pipeline complete because it ran out 
of elements, or because we stopped processing due to cancelation?"




More information about the lambda-libs-spec-observers mailing list