Сплитератор Java
Java Spliterator — это один из четырех итераторов — Enumeration, ListIterator и Spliterator.
Сплитератор Java
Подобно Iterator и ListIterator, Spliterator — это итератор Java, который используется для последовательной итерации элементов из реализованного объекта List. Некоторые важные моменты о Java Spliterator:
- Java Spliterator – это интерфейс в Java Collection API.
- Spliterator представлен в выпуске Java 8 в пакете
java.util
. - Он поддерживает функции параллельного программирования.
- Мы можем использовать его как для классов Collection API, так и для классов Stream API.
- Он предоставляет характеристики коллекций или объектов API.
- Нельзя использовать этот итератор для классов, реализованных на карте.
- Он использует метод
tryAdvance()
для индивидуальной итерации элементов в нескольких потоках для поддержки параллельной обработки. - Он использует метод
forEachRemaining()
для последовательной итерации элементов в одном потоке. - Он использует метод
trySplit()
, чтобы разделить себя на вспомогательные разделители для поддержки параллельной обработки. - Spliterator поддерживает как последовательную, так и параллельную обработку данных.
Spliterator сам по себе не поддерживает параллельное программирование. Тем не менее, он предоставляет некоторые методы для его поддержки. Разработчики должны использовать методы интерфейса Spliterator и реализовывать параллельное программирование с помощью Fork/Join Framework (один из хороших подходов).
Основные функции Spliterator
- Разделение исходных данных.
- Обработка исходных данных.
Диаграмма классов Java Spliterator
Методы разделения Java
В этом разделе мы перечислим все методы Java Spliterator один за другим с некоторым полезным описанием.
- int характеристики(): возвращает набор характеристик этого разветвителя и его элементов.
- длинная оценкаSize(): возвращает оценку количества элементов, которые будут обнаружены при обходе forEachRemaining(), или возвращает значение Long.MAX_VALUE, если число элементов бесконечно, неизвестно или слишком дорого для вычисления.
- по умолчанию void forEachRemaining(действие потребителя): выполняет указанное действие для каждого оставшегося элемента последовательно в текущем потоке, пока все элементы не будут обработаны или пока действие не вызовет исключение.
- Компаратор по умолчанию getComparator(): если источник этого разделителя СОРТИРОВАН компаратором, возвращает этот компаратор.
- длинный по умолчанию getExactSizeIfKnown(): удобный метод, который возвращает AssessmentSize(), если этот разделитель SIZED, иначе -1.
- логическое значение по умолчанию hasCharacteristics(int характеристики): возвращает значение true, если характеристики этого разветвителя() содержат все заданные характеристики.
- boolean tryAdvance(Consumer action): если оставшийся элемент существует, выполняет над ним заданное действие, возвращая true; иначе возвращает ложь.
- Сплитератор trySplit(): если этот сплитератор может быть разделен, возвращает сплитератор, покрывающий элементы, которые после возврата из этого метода не будут покрыты этим сплитератором.
Пример сплиттера Java
В этом разделе мы обсудим, как создать объект Java Spliterator с помощью 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, он поддерживает как последовательную, так и параллельную обработку данных.
- По сравнению с другими итераторами, он обеспечивает более высокую производительность.
Итератор против Сплитератора
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. |
Это все о Spliterator в Java. Ссылка: документ API