Jak sama nazwa wskazuje (spliterator) jest to swojego rodzaju iterator pozwalający na podział na mniejsze. Oprócz możliwości podziału posiada jeszcze kilka innych ciekawych funkcjonalności.
Podział – trySplit()
Wygląda to trochę jak podział komórkowy 🙂 Ponieważ każdy podział z reguły powinien dzielić aktualny Spliterator na dwa mniejsze o takim samym rozmiarze:
Spliterator<String> first = SomeService.getNames();
Spliterator second = names.trySplit();
sizeOf(first) == sizeOf(second);Przechodzenie po elementach – tryAdvance()
W odróżnieniu do Iteratora, Spliterator posiada metodę tryAdvance wykorzystującą tak zwany iterator wewnętrzny:
Spliterator<String> names = SomeService.getNames();
names.tryAdvance(name -> System.out.println(name));Metoda tryAdvance zwraca wartość logiczną (true lub false), w zależności czy powinniśmy oczekiwać następnego elementu czy też nie:
while(names.tryAdvance(name -> System.out.println(name))){}Rozmiar – estimatedSize()
Spliteratory mogę mieć, ale nie muszą, określony rozmiar. Stąd nazwa metody mówi o szacowanym rozmiarze.
Charakterystyki – characteristics()
Spliteratory są też opisywane za pomocą charakterystyk. Przykładem może być charakterystyka mówiąca o tym czy Spliterator posiada dokładny rozmiar, czy też nie. Więcej można znaleźć tutaj https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html#characteristics–.
Warto zajrzeć
1. https://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html
