Java Spliterator 接口是一个内部迭代器,它将流 分成更小的部分。这些较小的零件可以并行处理。
在实际编程中,我们可能永远不需要直接使用Spliterator。在正常操作下,它的行为与 Java Iterator 完全相同。
Spliterator<T> spliterator = list.spliterator();
Java 集合类提供 default stream() 和 parallelStream() 方法,它们通过调用在内部使用 Spliterator到拆分器()。它有助于并行处理收集数据。
default Stream<E> stream() { return StreamSupport.stream(spliterator(), false); } default Stream<E> parallelStream() { return StreamSupport.stream(spliterator(), true); }
以下是 Spliterator 在 Java 中提供的功能列表。
hasNext()
和 next()
操作组合到一个方法中。true
;否则返回 false
。验证ArrayList 的Spliterator 特性的Java 示例。
ArrayList<String> list = new ArrayList<>(); Spliterator<String> spliterator = list.spliterator(); int expected = Spliterator.ORDERED | Spliterator.SIZED | Spliterator.SUBSIZED; System.out.println(spliterator.characteristics() == expected); //true if (spliterator.hasCharacteristics(Spliterator.ORDERED)) { System.out.println("ORDERED"); } if (spliterator.hasCharacteristics(Spliterator.DISTINCT)) { System.out.println("DISTINCT"); } if (spliterator.hasCharacteristics(Spliterator.SORTED)) { System.out.println("SORTED"); } if (spliterator.hasCharacteristics(Spliterator.SIZED)) { System.out.println("SIZED"); } if (spliterator.hasCharacteristics(Spliterator.CONCURRENT)) { System.out.println("CONCURRENT"); } if (spliterator.hasCharacteristics(Spliterator.IMMUTABLE)) { System.out.println("IMMUTABLE"); } if (spliterator.hasCharacteristics(Spliterator.NONNULL)) { System.out.println("NONNULL"); } if (spliterator.hasCharacteristics(Spliterator.SUBSIZED)) { System.out.println("SUBSIZED"); }
程序输出。
true ORDERED SIZED SUBSIZED
获取后备集合大小的 Java 示例,即拆分器要迭代的元素数。
ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); Spliterator<String> spliterator = list.spliterator(); System.out.println(spliterator.estimateSize()); System.out.println(spliterator.getExactSizeIfKnown());
程序输出。
4 4
用于查找 spliterator 使用的比较器的 Java 示例。
SortedSet<String> set = new TreeSet<>( Collections.reverseOrder() ); set.add("A"); set.add("D"); set.add("C"); set.add("B"); System.out.println(set); System.out.println(set.spliterator().getComparator());
程序输出。
[D, C, B, A] java.util.Collections$ReverseComparator@7852e922
将元素拆分为两组并独立迭代的 Java 示例。
ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); list.add("E"); list.add("F"); Spliterator<String> spliterator1 = list.spliterator(); Spliterator<String> spliterator2 = spliterator1.trySplit(); spliterator1.forEachRemaining(System.out::println); System.out.println("========"); spliterator2.forEachRemaining(System.out::println);
程序输出。
D E F ======== A B C
使用 forEachRemaining() 方法在单个语句中执行 hasNext() 和 next() 操作的 Java 示例。
ArrayList<String> list = new ArrayList<>(); list.add("A"); list.add("B"); list.add("C"); list.add("D"); Spliterator<String> spliterator = list.spliterator(); spliterator.forEachRemaining(System.out::println);
程序输出。
A B C D
在本教程中,我们学习了 Java Spliterator 接口。除了 Spliterator 中的其他有用方法之外,我们还学习了 Spliterator 方法和简单示例来迭代集合元素和流。
在评论部分把你的问题告诉我。
快乐学习!!
参考:
地址:https://www.cundage.com/article/java-spliterator.html