在 Java 8 中,我们有类Stream,奇怪的是它有一个方法
Iterator<T> iterator()
所以你会期望它实现接口Iterable,这正是需要这个方法,但事实并非如此。
当我想使用 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)) { ... }
我在这里错过了什么吗?
人们已经在邮件列表中提出了同样的问题——。主要原因是 Iterable 也具有可重复迭代的语义,而 Stream 则没有。
我认为主要原因是这Iterable意味着可重用性,而Stream只能使用一次的东西——更像是一个Iterator. 如果Stream扩展,那么现有代码在收到第二次抛出的 anIterable时可能会感到惊讶。Iterable``Exception``for (element : iterable)
我认为主要原因是这Iterable意味着可重用性,而Stream只能使用一次的东西——更像是一个Iterator.
Iterable
Stream
Iterator
如果Stream扩展,那么现有代码在收到第二次抛出的 anIterable时可能会感到惊讶。Iterable``Exception``for (element : iterable)
Iterable``Exception``for (element : iterable)