Hello! By the way one of the painful code patterns in modern Java is `for(int i = 0; i<bound; i++)` which is very verbose, hackish, confusing for newbies and prone to errors as the variable need to be repeated three times. Also the variable is not effectively final, despite it never changes within the loop body, so could have been considered as redeclared on every loop iteration (like in for-each). With the new proposal it's possible to write `for(int i : range(0, bound).boxed())` (assuming import static j.u.s.IntStream.range), which looks much better, though it has obvious performance drawback. Moving IterableOnce to BaseStream would enable to use `for(int i : range(0, bound))` which looks even better, though again we have plenty of garbage (but considerably less than in previous case!). I wonder whether Java could evolve to the point where such kind of code would be a recommended way to iterate over subsequent integer values without any performance handicap.
With best regards, Tagir Valeev. On Fri, Mar 1, 2019 at 9:47 AM Stuart Marks <stuart.ma...@oracle.com> 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