Поиск по сайту:

Сплитератор Java


Java Spliterator — это один из четырех итераторов — Enumeration, ListIterator и Spliterator.

Сплитератор Java

Подобно Iterator и ListIterator, Spliterator — это итератор Java, который используется для последовательной итерации элементов из реализованного объекта List. Некоторые важные моменты о Java Spliterator:

  1. Java Spliterator – это интерфейс в Java Collection API.
  2. Spliterator представлен в выпуске Java 8 в пакете java.util.
  3. Он поддерживает функции параллельного программирования.
  4. Мы можем использовать его как для классов Collection API, так и для классов Stream API.
  5. Он предоставляет характеристики коллекций или объектов API.
  6. Нельзя использовать этот итератор для классов, реализованных на карте.
  7. Он использует метод tryAdvance() для индивидуальной итерации элементов в нескольких потоках для поддержки параллельной обработки.
  8. Он использует метод forEachRemaining() для последовательной итерации элементов в одном потоке.
  9. Он использует метод trySplit(), чтобы разделить себя на вспомогательные разделители для поддержки параллельной обработки.
  10. Spliterator поддерживает как последовательную, так и параллельную обработку данных.

Spliterator сам по себе не поддерживает параллельное программирование. Тем не менее, он предоставляет некоторые методы для его поддержки. Разработчики должны использовать методы интерфейса Spliterator и реализовывать параллельное программирование с помощью Fork/Join Framework (один из хороших подходов).

Основные функции Spliterator

  • Разделение исходных данных.
  • Обработка исходных данных.

Диаграмма классов Java Spliterator

Методы разделения Java

В этом разделе мы перечислим все методы Java Spliterator один за другим с некоторым полезным описанием.

  1. int характеристики(): возвращает набор характеристик этого разветвителя и его элементов.
  2. длинная оценкаSize(): возвращает оценку количества элементов, которые будут обнаружены при обходе forEachRemaining(), или возвращает значение Long.MAX_VALUE, если число элементов бесконечно, неизвестно или слишком дорого для вычисления.
  3. по умолчанию void forEachRemaining(действие потребителя): выполняет указанное действие для каждого оставшегося элемента последовательно в текущем потоке, пока все элементы не будут обработаны или пока действие не вызовет исключение.
  4. Компаратор по умолчанию getComparator(): если источник этого разделителя СОРТИРОВАН компаратором, возвращает этот компаратор.
  5. длинный по умолчанию getExactSizeIfKnown(): удобный метод, который возвращает AssessmentSize(), если этот разделитель SIZED, иначе -1.
  6. логическое значение по умолчанию hasCharacteristics(int характеристики): возвращает значение true, если характеристики этого разветвителя() содержат все заданные характеристики.
  7. boolean tryAdvance(Consumer action): если оставшийся элемент существует, выполняет над ним заданное действие, возвращая true; иначе возвращает ложь.
  8. Сплитератор 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(). Да, оба работают одинаково.

Преимущества сплитератора

  1. В отличие от Iterator и ListIterator, он поддерживает функции параллельного программирования.
  2. В отличие от Iterator и ListIterator, он поддерживает как последовательную, так и параллельную обработку данных.
  3. По сравнению с другими итераторами, он обеспечивает более высокую производительность.

Итератор против Сплитератора

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