在Java 8中,我们有类Stream <T>,它奇怪地有一个方法
Stream <T>
Iterator<T> iterator()
因此,您可能希望它实现接口Iterable<T>,而该接口正是需要此方法,但事实并非如此。
Iterable<T>
当我想使用foreach循环遍历Stream时,我必须做类似的事情
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)) { ... }
我在这里想念什么吗?
人们已经在邮件列表 asked 上问过同样的问题。主要原因是Iterable也具有可重复的语义,而Stream没有。
我认为主要原因是Iterable暗示可重用性,而Stream它只能使用一次,更像是Iterator。
如果Stream扩展Iterable当它接收到那么现有的代码可能会感到惊讶Iterable的是抛出一个Exception他们做第二次for (element : iterable)。
Exception
for (element : iterable)