Подтвердить что ты не робот

Что было бы хорошим сценарием для Spliterator в Java 8?

Что было бы хорошим сценарием для Spliterator в Java 8?

4b9b3361

Ответ 1

Обычно разработчик приложения не будет использовать API Spliterator напрямую. Но если вы предоставляете API и реализуете свой собственный подобный коллекции, вы можете реализовать Spliterator, чтобы адаптировать вашу коллекцию к API Stream. Это поддерживает функциональный подход, параллельную обработку и другие функции.

Например, я написал утилиту для перечисления IP-адресов в сети, указанной в нотации CIDR. Это не настоящая коллекция; то есть он не несет список всех адресов в памяти сразу, только номер сети и сетевую маску. Но, обнажая a Spliterator, его можно легко адаптировать к Stream. (Каждый Spliterator просто отслеживает текущий IP-адрес и максимальный адрес в своей доле сети.)

Другим примером из основной среды выполнения Java является DirectoryStream для перемещения файловой системы.

Ответ 2

Пример использования примера: "Преобразует итератор в поток"

public static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
   final Iterable<T> iterable = () -> iterator;
  return StreamSupport.stream(iterable.spliterator(), false);
}

Ответ 3

Spliterator является расширением вневременного класса Iterator, который позволяет разделить поток объектов на итерацию (Stream работает, собирая операции перед итерацией).

Я не могу думать о том, когда средний разработчик должен будет работать с Spliterator. Collection и Collections API невероятно богаты в Java 8, и в большинстве случаев вам лучше использовать подкласс vanilla Collection вместо создания собственного интерфейса Stream.

Примером использования Spliterator может быть библиотека для графиков с использованием связанной структуры данных, над которой стандартная Spliterator/stream() составляет undefined.