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?
Streampara APIs de legado que esperaIterable
getIterable()quereturn s::iterator;
for (T element : stream::iterator), por isso ainda prefiro se o Stream também implementaria Iterableou um método toIterable().