Java Spliterator

Le Java Spliterator est l’un des quatre itérateurs – Énumération, Iterator, ListIterator et Spliterator.

Java Spliterator

Tout comme Iterator et ListIterator, Spliterator est un itérateur Java, utilisé pour parcourir les éléments un par un à partir d’un objet implémenté en List. Quelques points importants à propos de Java Spliterator sont :

  1. Java Spliterator est une interface dans l’API Java Collection.
  2. Spliterator a été introduit dans la version Java 8 dans le package java.util.
  3. Il prend en charge la fonctionnalité de programmation parallèle.
  4. Nous pouvons l’utiliser à la fois pour les classes de l’API Collection et de Stream.
  5. Il fournit des caractéristiques sur les objets de Collection ou d’API.
  6. Nous ne pouvons PAS utiliser cet itérateur pour les classes implémentées en Map.
  7. Il utilise la méthode tryAdvance() pour itérer individuellement sur les éléments dans plusieurs Threads afin de prendre en charge le traitement parallèle.
  8. Il utilise la méthode forEachRemaining() pour itérer séquentiellement sur les éléments dans un seul Thread.
  9. Il utilise la méthode trySplit() pour se diviser en sous-Spliterators afin de prendre en charge le traitement parallèle.
  10. Le Spliterator prend en charge à la fois le traitement séquentiel et parallèle des données.

Le Spliterator lui-même ne fournit pas le comportement de programmation parallèle. Cependant, il fournit quelques méthodes pour le prendre en charge. Les développeurs doivent utiliser les méthodes de l’interface Spliterator et implémenter la programmation parallèle en utilisant le Framework Fork/Join (une bonne approche).

Fonctionnalités principales du Spliterator

  • Division des données source.
  • Traitement des données source.

Diagramme de classe de la classe Java Spliterator

Le diagramme suivant montre le diagramme de classe de l’interface Java Spliterator. Il contient de nombreux champs et méthodes.

Méthodes de la classe Java Spliterator

Dans cette section, nous énumérerons tous les méthodes de Java Spliterator une par une avec une description utile.

  1. int caractéristiques(): Retourne un ensemble de caractéristiques de ce Spliterator et de ses éléments.
  2. long estimateSize(): Retourne une estimation du nombre d’éléments qui seraient rencontrés par un parcours forEachRemaining(), ou retourne Long.MAX_VALUE si infini, inconnu ou trop coûteux à calculer.
  3. default void forEachRemaining(Consumer action): Effectue l’action donnée pour chaque élément restant, séquentiellement dans le thread actuel, jusqu’à ce que tous les éléments aient été traités ou que l’action lance une exception.
  4. default Comparator getComparator(): Si la source de ce Spliterator est TRIÉE par un Comparator, retourne ce Comparator.
  5. default long getExactSizeIfKnown(): Méthode de commodité qui retourne estimateSize() si ce Spliterator est de TAILLE définie, sinon -1.
  6. default boolean hasCharacteristics(int characteristics): Renvoie vrai si les caractéristiques() de ce Spliterator contiennent toutes les caractéristiques données.
  7. boolean tryAdvance(Consumer action): Si un élément restant existe, effectue l’action donnée dessus, renvoyant true ; sinon renvoie false.
  8. Spliterator trySplit(): Si ce spliterator peut être partitionné, retourne un Spliterator couvrant des éléments, qui, après l’exécution de cette méthode, ne seront pas couverts par ce Spliterator.

Exemple de Java Spliterator

Dans cette section, nous discuterons de la création d’un objet Java Spliterator à l’aide de la méthode spliterator() et développerons un exemple simple.

import java.util.Spliterator;
import java.util.ArrayList;
import java.util.List;

public class SpliteratorSequentialIteration
{
  public static void main(String[] args) 
  {
	List names = new ArrayList<>();
	names.add("Rams");
	names.add("Posa");
	names.add("Chinni");
		
	// Obtenir Spliterator
	Spliterator namesSpliterator = names.spliterator();
		
	// Parcourir les éléments
	namesSpliterator.forEachRemaining(System.out::println);			
   }
}

Sortie :-

Rams
Posa
Chinni

Si nous observons le programme et la sortie ci-dessus, nous pouvons facilement comprendre que la méthode Spliterator.forEachRemaining() fonctionne de la même manière que ArrayList.foreach(). Oui, les deux fonctionnent de manière similaire.

Avantages de Spliterator

  1. Contrairement à Iterator et ListIterator, il prend en charge la fonctionnalité de programmation parallèle.
  2. Contrairement à Iterator et ListIterator, il prend en charge le traitement des données de manière séquentielle et parallèle.
  3. Comparé aux autres itérateurs, il offre de meilleures performances.

Iterator vs Spliterator

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.

C’est tout ce qu’il y a à savoir sur Spliterator en Java. Référence : Documentation API

Source:
https://www.digitalocean.com/community/tutorials/java-spliterator