Что было бы хорошим сценарием для Spliterator
в Java 8?
Что было бы хорошим сценарием для Spliterator в Java 8?
Ответ 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.