В 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().