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