Java 根据SE8,迭代器和Iterable接口之间的差异
我正在浏览Java 8的迭代器和Iterable接口的文档。请找到以下文档的链接。我无法理解其中的区别,因为迭代器最近添加的ForEachRestain方法似乎与Iterable的forEach方法非常相似。如果有人能帮助我理解上述方法之间的区别,以及迭代器和Iterable之间的区别,以及它们在最新版本Java8中的各自用途,我将不胜感激Java 根据SE8,迭代器和Iterable接口之间的差异,java,iterator,iterable,Java,Iterator,Iterable,我正在浏览Java 8的迭代器和Iterable接口的文档。请找到以下文档的链接。我无法理解其中的区别,因为迭代器最近添加的ForEachRestain方法似乎与Iterable的forEach方法非常相似。如果有人能帮助我理解上述方法之间的区别,以及迭代器和Iterable之间的区别,以及它们在最新版本Java8中的各自用途,我将不胜感激 在查看接口文档时,您应该主要关注非默认方法,因为默认方法只是使用其他非默认方法实现的方法 如果只考虑非默认方法,就会发现Iterable是一个类,它有一个
在查看接口文档时,您应该主要关注非默认方法,因为默认方法只是使用其他非默认方法实现的方法 如果只考虑非默认方法,就会发现Iterable是一个类,它有一个
迭代器()
方法返回一个迭代器。例如:Collection就是这样一个类:每个集合都可以使用它提供的迭代器进行迭代,并且能够遍历集合
默认方法只是在从Iterable中获取迭代器的能力之上实现的
forEach()
forEachRemaining()
对迭代器的所有剩余元素执行某些操作(因为在调用forEachRemaining()
之前,您可能在迭代器上调用了几次next()
)。但是是的,这两个非常接近。一个显著的区别是,对于大多数iterables,可以多次调用forEach(),并多次遍历元素。相反,forEachRemaining()
会消耗迭代器的所有元素,第二次调用它不会有任何作用,因为不再有下一个元素 forEachRemaining()
将对使用方法next()
可以从当前迭代器的状态到达的所有元素应用操作
forEach()
将对Iterable
的所有元素应用操作
如果在尚未调用next()
的迭代器上使用forEachRemaining()
,则它们具有相同的效果。
但是,您可以使用next()
开始迭代,直到达到某个条件,然后使用foreachrestain()
对Iterable
的其余部分应用操作。是否检查了默认实现?它应该向您显示路径…/Iterable是一个可以从中创建迭代器的集合。这并不比那复杂多少。正如您所提到的,存在细微的差异,但文档中已涵盖了这一点。