Java分割器

时间:2020-02-23 14:36:52  来源:igfitidea点击:

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相比,它提供了更好的性能。

迭代器与拆分器

IteratorSpliterator
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.