![7a06699a7c4d1d96e2f8d7a4161806be.png](https://i-blog.csdnimg.cn/blog_migrate/3b102dafd0d0f53ec4b1259139563baf.jpeg)
恭喜你们,马上就要学完Java8 Stream流的一整系列了,其实我相信Stream流对很多使用Java的同学来说,都是一个知识盲点,因为这个原因,我才这么细致地讲解Stream流的各个知识点,通过这一整个系列,我相信只要认真看了的同学,都已掌握的差不多了,就差实战了。其实我在工作过程中,Stream流对我的帮助真的挺大的,所以,我想和大家分享一下,于是这系列的文章就出来了。在本系列文章发布的时候,有很多同学反映,Stream流的调试和forEach()的调试都不是特别友好,那本篇给出一个折中的调试方法,虽然不能完美解决调试的问题,但是基本上已经能解决绝大部分的调试问题了,没错,就是迭代器了,当然迭代器除了能辅助调试以外,他最重要的还是遍历功能。这篇文章除了介绍传统的迭代器外,还会介绍Java8中新增的Spliterator,因为在并行流的场合,Spliterator相当的好用。
我们先简单介绍一下传统的迭代器
迭代器是实现了Iterator接口的对象,并且Iterator接口允许遍历,获取或者移除元素。
public interface Iterator {
Iterator iterator();
E next();
default void remove() {
throw new UnsupportedOperationException("remove");
}
default void forEachRemaining(Consumer super E> action) {
Objects.requireNonNull(action);
while (hasNext())
action.accept(next());
}
}
使用Iterator的一般步骤:
- (1)通过iterator()方法,获取指向集合或流开头的迭代器。
- (2)建立一个hasNext()方法调用循环,只要hasNext()返回true,就继续迭代。
- (3)在循环中,通过调用next()方法获取每个元素。
private static void learnIterator() {
List lists = Arrays.asList("A