Java 根据SE8,迭代器和Iterable接口之间的差异

Java 根据SE8,迭代器和Iterable接口之间的差异,java,iterator,iterable,Java,Iterator,Iterable,我正在浏览Java 8的迭代器和Iterable接口的文档。请找到以下文档的链接。我无法理解其中的区别,因为迭代器最近添加的ForEachRestain方法似乎与Iterable的forEach方法非常相似。如果有人能帮助我理解上述方法之间的区别,以及迭代器和Iterable之间的区别,以及它们在最新版本Java8中的各自用途,我将不胜感激 在查看接口文档时,您应该主要关注非默认方法,因为默认方法只是使用其他非默认方法实现的方法 如果只考虑非默认方法,就会发现Iterable是一个类,它有一个

我正在浏览Java 8的迭代器和Iterable接口的文档。请找到以下文档的链接。我无法理解其中的区别,因为迭代器最近添加的ForEachRestain方法似乎与Iterable的forEach方法非常相似。如果有人能帮助我理解上述方法之间的区别,以及迭代器和Iterable之间的区别,以及它们在最新版本Java8中的各自用途,我将不胜感激


在查看接口文档时,您应该主要关注非默认方法,因为默认方法只是使用其他非默认方法实现的方法

如果只考虑非默认方法,就会发现Iterable是一个类,它有一个
迭代器()
方法返回一个
迭代器。例如:Collection就是这样一个类:每个集合都可以使用它提供的迭代器进行迭代,并且能够遍历集合

默认方法只是在从Iterable中获取迭代器的能力之上实现的

forEach()

forEachRemaining()
对迭代器的所有剩余元素执行某些操作(因为在调用
forEachRemaining()
之前,您可能在迭代器上调用了几次
next()
)。但是是的,这两个非常接近。一个显著的区别是,对于大多数iterables,可以多次调用forEach(),并多次遍历元素。相反,
forEachRemaining()
会消耗迭代器的所有元素,第二次调用它不会有任何作用,因为不再有下一个元素

forEachRemaining()
将对使用方法
next()
可以从当前
迭代器的状态到达的所有元素应用操作
forEach()
将对
Iterable
的所有元素应用操作

如果在尚未调用
next()
迭代器上使用
forEachRemaining()
,则它们具有相同的效果。

但是,您可以使用
next()
开始迭代,直到达到某个条件,然后使用
foreachrestain()
Iterable
的其余部分应用操作。是否检查了默认实现?它应该向您显示路径…/Iterable是一个可以从中创建迭代器的集合。这并不比那复杂多少。正如您所提到的,存在细微的差异,但文档中已涵盖了这一点。