我有一个数据结构,它本质上是一个链表,这意味着它的节点包含指向下一个节点的数据。
我研究了在这个类上使用for循环来促进迭代,我发现必须实现Iterable接口。但是,我对如何实现forEach()和spliterator()以及每个方法的作用感到困惑。
您不必实现spliterator()
和forEach()
方法。这些方法是在Java 8中引入的,它们有一个默认实现。
至于他们做什么:
spliterator()
在这个Iterable
描述的元素上创建一个Spliterator。Spliterator
用于遍历和划分源(例如,可以是Collection)的元素。它在Java 8中用于创建对象的并行流,这将允许您并行地对Iterable
的项执行操作。
forEach(Consumer action)
对Iterable
的所有元素执行一个操作(通过调用传递给它的Consumer的accept
方法)。
其默认实现行为如下:
for (T t : this)
action.accept(t);
你只需要实现iterator()
方法,它返回一个Iterator
。
当然你可以在Iterable的JavaDoc中读到这些
这是如何实现spliterator:
@Override
public Spliterator<A> spliterator() {
return Spliterators.spliterator(iterator(), size(), Spliterator.ORDERED);
}