В 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)) { ... }
Я что-то пропустил?