Java分割器
Java Spliterator是四个迭代器之一-Enumeration,Iterator,ListIterator和Spliterator。
Java分割器
与Iterator和ListIterator一样,Spliterator是一个Java迭代器,用于从List实现的对象中逐个迭代元素。
关于Java Spliterator的一些重要点是:
Java Spliterator是Java Collection API中的接口。
在Java 8发行版的java.util包中引入了Spliterator。
它支持并行编程功能。
我们可以将其用于Collection API和Stream API类。
它提供有关Collection或者API对象的特征。
我们不能将此Iterator用于Map实现的类。
它使用tryAdvance()方法在多个线程中分别迭代元素以支持并行处理。
它使用
forEachRemaining()
方法在单个线程中顺序地迭代元素。它使用" trySplit()"方法将自身划分为子拆分器,以支持并行处理。
分离器支持数据的顺序和并行处理。
分离器本身不提供并行编程行为。
但是,它提供了一些支持它的方法。
开发人员应该利用Spliterator接口方法,并通过使用Fork/Join Framework实现并行编程(一种不错的方法)。
分离器的主要功能
拆分源数据。
处理源数据。
Java Spliterator类图
下图显示了Java Spliterator接口的类图。
它具有许多领域和方法。
Java分离器方法
在本节中,我们将逐一列出所有Java Spliterator方法,并提供一些有用的描述。
int Characteristics():返回此Spliterator及其元素的一组特征。
long EstimateSize(long):返回对forEachRemaining()遍历将遇到的元素数量的估计,如果无限,未知或者计算成本太高,则返回Long.MAX_VALUE。
默认void forEachRemaining(Consumer action):在当前线程中依次对每个剩余元素执行给定的操作,直到所有元素都已处理或者该操作引发异常。
默认的Comparator getComparator():如果此Spliterator的来源由Comparator排序,则返回该Comparator。
默认的long getExactSizeIfKnown():如果此Splitizer为SIZED,则返回的方法为EstimateSize()的便捷方法,否则为-1。
默认值boolean hasCharacteristics(int features):如果此Spliterator的features()包含所有给定的特征,则返回true。
boolean tryAdvance(Consumer action):如果存在剩余元素,则对它执行给定的操作,返回true;否则,返回true。
否则返回false。Spliterator trySplit():如果可以对该拆分器进行分区,则返回一个覆盖元素的Spliterator,从该方法返回后,该元素将不被此Spliterator覆盖。
Java分离器示例
在本节中,我们将讨论如何使用spliterator()创建Java Spliterator对象,并将开发简单的示例。
import java.util.Spliterator; import java.util.ArrayList; import java.util.List; public class SpliteratorSequentialIteration { public static void main(String[] args) { List<String> names = new ArrayList<>(); names.add("Rams"); names.add("Posa"); names.add("Chinni"); //Getting Spliterator Spliterator<String> namesSpliterator = names.spliterator(); //Traversing elements namesSpliterator.forEachRemaining(System.out::println); } }
输出:
Rams Posa Chinni
如果观察上面的程序和输出,我们可以很容易地理解,这个Spliterator.forEachRemaining()方法的工作方式与ArrayList.foreach()相同。
是的,两者的工作方式相似。
分流器的优点
与Iterator和ListIterator不同,它支持并行编程功能。
与Iterator和ListIterator不同,它支持数据的顺序和并行处理。
与其他Iterators相比,它提供了更好的性能。
迭代器与拆分器
Iterator | Spliterator |
---|---|
Introduced in Java 1.2. | Introduced in Java 1.8. |
It is an Iterator for whole Collection API. | It is an Iterator for both Collection and Stream API, except Map implemented classes. |
It is an Universal Iterator. | It is NOT an Universal Iterator. |
It does NOT support Parallel Programming. | It supports Parallel Programming. |