In Java 8 abbiamo la classe Stream <T> , che curiosamente ha un metodo
Iterator<T> iterator()
Quindi ti aspetteresti che implementa l'interfaccia Iterable <T> , che richiede esattamente questo metodo, ma non è così.
Quando voglio iterare su uno Stream usando un ciclo foreach, devo fare qualcosa del genere
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)) { ... }
Mi sto perdendo qualcosa qui?
Stream
alle API legacy che si aspettanoIterable
getIterable()
areturn s::iterator;
for (T element : stream::iterator)
, quindi preferirei comunque che Stream implementasse Iterable
o un metodo toIterable()
.