W Javie 8 mamy klasę Stream <T> , która, co ciekawe, ma metodę
Iterator<T> iterator()
Można się więc spodziewać, że zaimplementuje interfejs Iterable <T> , który wymaga dokładnie tej metody, ale tak nie jest.
Kiedy chcę iterować po strumieniu za pomocą pętli foreach, muszę zrobić coś takiego
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)) { ... }
Czy coś mi umyka?
Stream
do starszych interfejsów API, które oczekująIterable
getIterable()
doreturn s::iterator;
for (T element : stream::iterator)
, więc nadal wolałbym, aby Stream również zaimplementowałby Iterable
lub metodę toIterable()
.