小编典典

为什么流不实现Iterable?

all

在 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)) { ... }

我在这里错过了什么吗?


阅读 86

收藏
2022-04-22

共1个答案

小编典典

人们已经在邮件列表中提出了同样的问题——。主要原因是 Iterable 也具有可重复迭代的语义,而 Stream 则没有。

我认为主要原因是这Iterable意味着可重用性,而Stream只能使用一次的东西——更像是一个Iterator.

如果Stream扩展,那么现有代码在收到第二次抛出的 anIterable时可能会感到惊讶。Iterable``Exception``for (element : iterable)

2022-04-22