根据SE8,Iterator和Iterable接口之间的区别

时间:2016-03-12 15:14:33

标签: java iterator iterable

我正在阅读Java 8的Iterator和Iterable接口的文档。请找到下面文档的链接。我无法理解差异,因为最近添加的迭代器的forEachRemaining方法看起来非常类似于Iterable的forEach方法。我真的很感激,如果有人可以帮助我理解上述方法之间的区别,也就是Iterator和Iterable之间的区别,以及它们各自在最新版本java 8中的用途。

Iterator

Iterable

2 个答案:

答案 0 :(得分:0)

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

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

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

Iterator从Iterable中获取迭代器,并为迭代的每个元素执行

forEach()为迭代器的所有剩余元素做了一些事情(因为你可能在调用forEachRemaining()之前在迭代器上多次调用next())。但是,是的,这两者非常接近。一个值得注意的区别是,对于大多数iterables,您可以多次调用forEach(),并将通过元素进行多次传递。相反,forEachRemaining()消耗迭代器的所有元素,并且第二次调用它不会做任何事情,因为不再有下一个元素。

答案 1 :(得分:0)

forEachRemaining()会对使用当前next()州方法Iterator 可以访问的所有元素执行操作。
forEach()会对Iterable的所有元素执行操作。

如果您对尚未调用forEachRemaining()的{​​{1}}使用Iterator,则效果相同。
但是,您可以开始使用next()进行迭代,直到达到某个条件,然后对next() Iterable的其余部分执行操作。