Автор оригинала: Pankaj Kumar.
Разделитель Java является одним из четырех итераторов – Перечисления, Итератора , списка и разделителя.
Разделитель Java
Как и Iterator и ListIterator, Spliterator-это итератор Java, который используется для перебора элементов по одному из реализованного объекта списка.
Некоторые важные моменты, касающиеся Java Spliterator, заключаются в следующем:
- Java Spliterator-это интерфейс в коллекции Java API.
- Разделитель представлен в Java 8 релизе в
java.util
пакете. - Он поддерживает функции параллельного программирования.
- Мы можем использовать его как для API коллекции, так и для классов Stream API.
- Он предоставляет характеристики объектов коллекции или API.
- Мы НЕ можем использовать этот итератор для Map реализованных классов.
- Он использует метод
try Advance()
для итерации элементов по отдельности в нескольких потоках для поддержки параллельной обработки. - Он использует метод
forEachRemaining()
для последовательного перебора элементов в одном потоке. - Он использует метод
try Split ()
, чтобы разделить себя на разделители для поддержки параллельной обработки. - Разделитель поддерживает как последовательную, так и параллельную обработку данных.
Сам разделитель не обеспечивает поведение параллельного программирования. Тем не менее, он предоставляет некоторые методы для его поддержки. Разработчики должны использовать методы интерфейса Spliterator и реализовывать параллельное программирование с помощью платформы Fork/Join (один хороший подход).
Основные функциональные возможности разделителя
- Разделение исходных данных.
- Обработка исходных данных.
Диаграмма классов разделителя Java
На следующей диаграмме показана схема классов интерфейса Java Spliterator. Она имеет множество областей и методов.
Методы разделителя Java
В этом разделе мы перечислим все методы Java Spliterator один за другим с некоторым полезным описанием.
- int характеристики(): Возвращает набор характеристик этого разделителя и его элементов.
- long estimateSize(): возвращает оценку количества элементов, с которыми столкнется обход forEachRemaining (), или возвращает значение Long.MAX_VALUE, если оно бесконечно, неизвестно или слишком дорого для вычисления.
- по умолчанию недействительно forEachRemaining(действие потребителя): Выполняет данное действие для каждого оставшегося элемента последовательно в текущем потоке, пока все элементы не будут обработаны или действие не вызовет исключение.
- Компаратор по умолчанию getComparator(): Если источник этого разделителя ОТСОРТИРОВАН Компаратором, возвращает этот компаратор.
- по умолчанию длинный getExactSizeIfKnown(): Удобный метод, который возвращает размер оценки (), если этот разделитель имеет РАЗМЕР, иначе -1.
- логическое значение по умолчанию имеет характеристики(в характеристики): Возвращает значение true, если эти характеристики разделителя() содержат все заданные характеристики.
- логическое действие tryAdvance(действие потребителя): Если оставшийся элемент существует, выполняет над ним данное действие, возвращая значение true; в противном случае возвращает значение false.
- Разделитель 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) { Listnames = new ArrayList<>(); names.add("Rams"); names.add("Posa"); names.add("Chinni"); // Getting Spliterator Spliterator namesSpliterator = names.spliterator(); // Traversing elements namesSpliterator.forEachRemaining(System.out::println); } }
Выход:-
Rams Posa Chinni
Если мы понаблюдаем за приведенной выше программой и выводом, то легко поймем, что это разделитель.Метод forEachRemaining() работает так же, как ArrayList .foreach(). Да, и то, и другое работает одинаково.
Преимущества сплитератора
- В отличие от Итератора и листератора, он поддерживает функции параллельного программирования.
- В отличие от Итератора и листератора, он поддерживает как последовательную, так и параллельную обработку данных.
- По сравнению с другими итераторами, он обеспечивает лучшую производительность.
Итератор против разделителя
Введено в Java 1.2. | Представлен в Java 1.8. |
Это итератор для API всей коллекции. | Это итератор как для сбора, так и для потокового API, за исключением классов, реализованных на карте. |
Это универсальный итератор. | Это НЕ универсальный итератор. |
Он НЕ поддерживает параллельное программирование. | Он поддерживает параллельное программирование. |
Это все о Spliterator на Java.
Ссылка: API Doc