Proposal: JDK-8148917 Enhanced-For Statement Should Allow Streams
Peter Levart
peter.levart at gmail.com
Thu Mar 7 09:00:30 UTC 2019
On 3/7/19 9:41 AM, Peter Levart wrote:
> There is a benefit in the runtime though. The code can decide what to
> do with the passed-in Iterable depending on it implementing
> IterableOnce or not. Much like what RandomAccess interface does to
> List(s). The code can decide to dump the iterable into a List and
> iterate the List multiple times if the Iterable implements
> IterableOnce or do direct multiple iteration on the passed-in Iterable
> if it doesn't.
Expanding on this further, there could be help for multi-pass iteration
in the Iterable(Once) interfaces. For example:
public interface Iterable<T> {
Iterator<T> iterator();
default Iterable<T> toMultipassIterable() {
return this;
}
}
and then:
public interface IterableOnce<T> extends Iterable<T> {
@Override
default Iterable<T> toMultipassIterable() {
List<T> list = new ArrayList<>();
for (T t : this) {
list.add(t);
}
return list;
}
}
... so any new code that needs multiple passes can do so easily.
Regards, Peter
More information about the core-libs-dev
mailing list