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