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