У Java 8 у нас є клас Stream <T> , у якому цікаво є метод
Iterator<T> iterator()
Тож ви б очікували, що він реалізує інтерфейс Iterable <T> , який вимагає саме цього методу, але це не так.
Коли я хочу повторити потік за допомогою циклу foreach, я повинен зробити щось на кшталт
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)) { ... }
Я щось тут пропускаю?
Stream
до застарілих API, які очікуютьIterable
getIterable()
доreturn s::iterator;
for (T element : stream::iterator)
, тому я все-таки вважаю за краще, якщо Stream також реалізує Iterable
або метод toIterable()
.