Класс Spliterator
Класс Spliterator представляет собой интерфейс для обхода
элементов источника данных и разделения этого источника на
несколько частей. Основное назначение Spliterator -
поддержка параллельной обработки потоков в Java Stream API.
У Spliterator есть метод tryAdvance, который
принимает потребителя и последовательно обрабатывает очередной
элемент, метод trySplit, который пытается разделить
текущий Spliterator на две части и вернуть новую часть,
а также метод estimateSize, который возвращает
приблизительное количество оставшихся элементов. Получить
Spliterator можно с помощью метода spliterator
у коллекций и других источников данных.
Синтаксис
Spliterator<T> spliterator = collection.spliterator();
spliterator.tryAdvance(consumer);
Spliterator<T> part = spliterator.trySplit();
long size = spliterator.estimateSize();
Пример
Давайте получим Spliterator у списка и обойдём
все его элементы с помощью метода tryAdvance:
import java.util.List;
import java.util.Spliterator;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
Spliterator<String> spliterator = list.spliterator();
while (spliterator.tryAdvance(System.out::println));
}
}
Результат выполнения кода:
"a"
"b"
"c"
"d"
"e"
Пример
Давайте разделим Spliterator на две части с помощью
метода trySplit и обойдём каждую часть отдельно:
import java.util.List;
import java.util.Spliterator;
public class Main
{
public static void main(String[] args)
{
List<Integer> list = List.of(1, 2, 3, 4, 5);
Spliterator<Integer> first = list.spliterator();
Spliterator<Integer> second = first.trySplit();
System.out.println("First part:");
first.forEachRemaining(System.out::println);
System.out.println("Second part:");
second.forEachRemaining(System.out::println);
}
}
Результат выполнения кода:
"First part:"
1
2
3
"Second part:"
4
5
Пример
Давайте узнаем приблизительное количество элементов с помощью
метода estimateSize:
import java.util.List;
import java.util.Spliterator;
public class Main
{
public static void main(String[] args)
{
List<String> list = List.of("a", "b", "c", "d", "e");
Spliterator<String> spliterator = list.spliterator();
System.out.println(spliterator.estimateSize());
spliterator.tryAdvance(System.out::println);
System.out.println(spliterator.estimateSize());
}
}
Результат выполнения кода:
5
"a"
4
Смотрите также
-
интерфейс
Iterable,
который представляет источник данных для обхода -
метод
spliterator,
который возвращает Spliterator для Iterable -
метод
tryAdvance,
который обрабатывает очередной элемент -
метод
trySplit,
который делит Spliterator на две части