2017-02-26 95 views
-2

并且它们都获得Consumer作为参数。所以如果Java 8是为了避免混淆,就像它在Time API中所做的那样,为什么它会添加新的混淆?还是我错过了一些观点?Iterator.forEachRemaining()和Iterable.forEach()有什么意义?

+1

你想比较'Iterator'和'Iterable'吗? http://stackoverflow.com/questions/6863182/what-is-the-difference-between-iterator-and-iterable-and-how-to-use-them – nullpointer

+1

这是如何混淆?这些是两个不同的接口,方法的名称非常清楚地表明它们做了什么。 –

+1

@JBNizet所有正确的家伙,不要把西红柿扔在我身上!我明白了:D –

回答

13

要理解为什么这两种方法都存在,您需要先了解IteratorIterable

Iterator基本上是有一个“下一个元素”,通常是一个结束。

Iterable是包含有限或无限序列元素的东西,因此可以通过继续获取下一个元素来重复。换句话说,Iterable s可以被Iterator s迭代。

现在你明白这一点,我可以谈谈这两种方法之间有什么区别。

让我们以一个数组列表为例。这是什么是数组列表中:

[1, 3, 6, 8, 0] 

现在,如果我叫Iterable.forEach(),并传递System.out::print()13680将被打印出来。这是因为Iterable.forEach遍历整个元素序列。

在另一方面,如果我得到的数组列表的Iterator,并呼吁next两次,调用forEachRemainingSystem.out::print()之前,680将被打印出来。 Iterator已经迭代了前两个元素,所以剩下的元素是6,8和0.

+0

好吧。谢谢你的清晰和完整的答案。 –