Hello!

Just an observation.

If there were two new subtypes of Iterable introduced: IterableOnce and IterableMultipleTimes, then all existing Iterables could be retrofitted to implement one of these.

It wouldn't *automatically* solve the problem of 3rd party API, which accepts an Iterable and iterates it multiple times, but would provide a means to change that API in a straightforward way.

Also, the static analysis tools could issue a suggestion for code that iterates Iterable more than once to switch to IterableMultipleTimes, so that it won't be possible to pass in an IterableOnce.

It would also allow to strengthen the specification for IterableMultipleTimes and state that all classes implementing it must make it possible to obtain multiple iterators.

With kind regards,
Ivan


On 2/28/19 6:43 PM, Stuart Marks wrote:
Hi all,

Please review and comment on this proposal to allow Stream instances to be used in enhanced-for ("for-each") loops.

Abstract

Occasionally it's useful to iterate a Stream using a conventional loop. However, the Stream interface doesn't implement Iterable, and therefore streams cannot be used with the enhanced-for statement. This is a proposal to remedy that situation by introducing a new interface IterableOnce that is a subtype of Iterable, and then retrofitting the Stream interface to implement it. Other JDK classes will also be retrofitted to implement IterableOnce.

Full Proposal:

http://cr.openjdk.java.net/~smarks/reviews/8148917/IterableOnce0.html

Bug report:

    https://bugs.openjdk.java.net/browse/JDK-8148917

Webrev:

    http://cr.openjdk.java.net/~smarks/reviews/8148917/webrev.0/

Note, this changeset isn't ready to push yet. In particular, it has no tests yet. However, the implementation is so simple that I figured I should include it. Comments on the specification wording are also welcome.

Thanks,

s'marks


--
With kind regards,
Ivan Gerasimov

Reply via email to