In Java 8 haben wir die Klasse Stream <T> , die seltsamerweise eine Methode hat
Iterator<T> iterator()
Sie würden also erwarten, dass die Schnittstelle Iterable <T> implementiert wird , was genau diese Methode erfordert, aber das ist nicht der Fall.
Wenn ich mit einer foreach-Schleife über einen Stream iterieren möchte, muss ich so etwas tun
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)) { ... }
Vermisse ich hier etwas?
Stream
an ältere APIs zu übergeben, die erwartenIterable
getIterable()
zureturn s::iterator;
for (T element : stream::iterator)
, daher würde ich es immer noch vorziehen, wenn Stream auch Iterable
eine Methode implementieren würde toIterable()
.