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?
Streamalle API legacy che si aspettanoIterable
getIterable()areturn s::iterator;
for (T element : stream::iterator), quindi preferirei comunque che Stream implementasse Iterableo un metodo toIterable().