No Java 8, temos a classe Stream <T> , que curiosamente tem um método
Iterator<T> iterator()
Então, você esperaria implementar a interface Iterable <T> , que requer exatamente esse método, mas esse não é o caso.
Quando quero iterar em um Stream usando um loop foreach, tenho que fazer 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)) { ... }
Estou faltando alguma coisa aqui?
Stream
para APIs de legado que esperaIterable
getIterable()
quereturn s::iterator;
for (T element : stream::iterator)
, por isso ainda prefiro se o Stream também implementaria Iterable
ou um método toIterable()
.