Java Spliterator is een van de vier iterators – Enumeratie, Iterator, ListIterator en Spliterator.
Java Spliterator
Net als Iterator en ListIterator is Spliterator een Java Iterator, die wordt gebruikt om elementen één voor één te doorlopen vanuit een LIjst-geïmplementeerd object. Enkele belangrijke punten over Java Spliterator zijn:
- Java Spliterator is een interface in de Java Collection API.
- Spliterator is geïntroduceerd in de Java 8-release in het
java.util
-pakket. - Het ondersteunt Parallel Programming-functionaliteit.
- We kunnen het gebruiken voor zowel de Collection API als Stream API-klassen.
- Het geeft kenmerken weer over Collection- of API-objecten.
- We kunnen deze Iterator NIET gebruiken voor Map-geïmplementeerde klassen.
- Het gebruikt de
tryAdvance()
methode om elementen individueel te doorlopen in meerdere Threads om Parallel Processing te ondersteunen. - Het gebruikt de
forEachRemaining()
methode om elementen sequentieel door te lopen in een enkele Thread. - Het gebruikt de
trySplit()
methode om zichzelf te verdelen in Sub-Spliterators om Parallel Processing te ondersteunen. - Spliterator ondersteunt zowel sequentiële als parallelle verwerking van gegevens.
De Spliterator zelf biedt geen parallel programmeringsgedrag. Het biedt echter wel enkele methoden ter ondersteuning ervan. Ontwikkelaars moeten de methoden van het Spliterator-interface gebruiken en parallel programmeren implementeren door gebruik te maken van het Fork/Join Framework (een goede aanpak).
Belangrijkste functionaliteiten van Spliterator
- Het opsplitsen van de brongegevens.
- Het verwerken van de brongegevens.
Java Spliterator Klassen Diagram
Het volgende diagram toont het Klassen Diagram van de Java Spliterator-interface. Het heeft veel velden en methoden.
Java Spliterator Methoden
In dit gedeelte zullen we alle Java Spliterator-methoden één voor één opsommen, met een nuttige beschrijving.
- int characteristics(): Geeft een set kenmerken van deze Spliterator en diens elementen terug.
- long estimateSize(): Geeft een schatting van het aantal elementen dat zou worden tegengekomen door een forEachRemaining() traversie, of geeft Long.MAX_VALUE terug als oneindig, onbekend of te duur om te berekenen.
- default void forEachRemaining(Consumer action): Voert de opgegeven actie uit voor elk overgebleven element, sequentieel in de huidige thread, totdat alle elementen zijn verwerkt of de actie een uitzondering veroorzaakt.
- default Comparator getComparator(): Als de bron van deze Spliterator GESORTEERD is door een Comparator, geeft dit de Comparator terug.
- default long getExactSizeIfKnown(): Handige methode die estimateSize() retourneert als deze Spliterator SIZED is, anders -1.
- default boolean hasCharacteristics(int characteristics): Geeft true terug als de kenmerken() van deze Spliterator alle opgegeven kenmerken bevatten.
- boolean tryAdvance(Consumer action): Voert de opgegeven actie uit op het volgende element, sequentieel in de huidige thread, geeft true terug als er nog een element over is; anders geeft het false terug.
- Spliterator trySplit(): Als deze spliterator kan worden verdeeld, geeft het een Spliterator terug die elementen bestrijkt die, bij terugkeer van deze methode, niet door deze Spliterator worden bestreken.
Java Spliterator Voorbeeld
In dit gedeelte zullen we bespreken hoe je een Java Spliterator-object kunt maken met behulp van `spliterator()` en zullen we een eenvoudig voorbeeld ontwikkelen.
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");
// Spliterator verkrijgen
Spliterator namesSpliterator = names.spliterator();
// Elementen doorlopen
namesSpliterator.forEachRemaining(System.out::println);
}
}
Uitvoer:-
Rams
Posa
Chinni
Als we het bovenstaande programma en de uitvoer observeren, kunnen we gemakkelijk begrijpen dat deze `Spliterator.forEachRemaining()`-methode op dezelfde manier werkt als `.foreach()` van ArrayList. Ja, beide werken op een vergelijkbare manier.
Voordelen van Spliterator
- In tegenstelling tot Iterator en ListIterator ondersteunt het Parallel Programming-functionaliteit.
- In tegenstelling tot Iterator en ListIterator ondersteunt het zowel sequentiële als parallelle verwerking van gegevens.
- Vergeleken met andere Iterators biedt het betere prestaties.
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. |
Dat is alles over Spliterator in Java. Referentie: API Doc
Source:
https://www.digitalocean.com/community/tutorials/java-spliterator