根据 SE8 Iterator 和 Iterable 接口的区别

difference between Iterator and Iterable interfaces according to SE8

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

Iterator

Iterable

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

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

默认方法只是在从 Iterable 中获取 Iterator 的能力之上实现的。

forEach() 从 Iterable 中获取迭代器并为 iterable 的每个 元素做一些事情

forEachRemaining() 对迭代器的所有 remaining 元素做了一些事情(因为在调用 forEachRemaining()).但是,是的,这两个彼此非常接近。一个显着的区别是,对于大多数可迭代对象,您可以多次调用 forEach(),并将多次遍历元素。相反,forEachRemaining() 消耗迭代器的所有元素,第二次调用它不会做任何事情,因为不再有下一个元素。

forEachRemaining() 将对所有可以使用方法 next() 从当前 Iterator 的状态.
forEach() 将对 Iterable.

的所有元素应用操作

如果您在尚未调用 next()Iterator 上使用 forEachRemaining(),它们具有相同的效果。
但是,您可以开始使用 next() 进行迭代,直到达到特定条件,然后使用 forEachRemaining().

Iterable 的其余部分应用操作