En Java 8 tenemos la clase Stream <T> , que curiosamente tiene un método
Iterator<T> iterator()
Por lo tanto, es de esperar que implemente la interfaz Iterable <T> , que requiere exactamente este método, pero ese no es el caso.
Cuando quiero iterar sobre un Stream usando un bucle foreach, tengo que hacer algo como
public static Iterable<T> getIterable(Stream<T> s) {
return new Iterable<T> {
@Override
public Iterator<T> iterator() {
return s.iterator();
}
};
}
for (T element : getIterable(s)) { ... }
¿Me estoy perdiendo de algo?
Stream
a las API heredadas que esperaIterable
getIterable()
quereturn s::iterator;
for (T element : stream::iterator)
, por lo que aún preferiría que Stream también implementara Iterable
o un método toIterable()
.