【问题标题】:difference between Iterator and Iterable interfaces according to SE8根据 SE8,Iterator 和 Iterable 接口之间的区别
【发布时间】:2016-06-27 19:56:08
【问题描述】:

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

Iterator

Iterable

【问题讨论】:

  • 你检查过默认实现吗?它应该向您显示路径.../
  • Iterable 是一个集合,您可以从中创建一个迭代器。它并不比这复杂得多。正如您所提到的,存在细微的差异,但这已包含在文档中。

标签: java iterator iterable


【解决方案1】:

forEachRemaining() 将对使用方法next() 从当前Iterator 的状态 可以到达的所有元素应用一个操作。
forEach() 将应用一个对Iterable 的所有元素执行操作。

如果您在尚未调用next()Iterator 上使用forEachRemaining(),它们具有相同的效果。
但是,您可以使用 next() 开始迭代,直到达到特定条件,然后使用 forEachRemaining()Iterable 的其余部分应用操作。

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-20
      • 2013-03-03
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 2015-06-22
      • 2012-07-03
      • 2016-12-05
      • 2021-04-09
      相关资源
      最近更新 更多