Какой будет хороший сценарий использования Spliterator в Java 8?
Какой будет хороший сценарий использования для Spliterator
класс в Java 8?
3 ответа
Обычно разработчик приложения не потребляет Spliterator
API напрямую. Но если вы предоставляете API и реализуете свой собственный класс, подобный коллекции, вы можете реализовать Spliterator
адаптировать вашу коллекцию к Stream
API. Это поддерживает функциональный подход, параллельную обработку и другие функции.
Например, я написал утилиту для перечисления IP-адресов в сети, указанных в нотации CIDR. Это не совсем коллекция; то есть, он не несет список всех адресов в памяти одновременно, только номер сети и маску сети. Но, подвергая Spliterator
, он может быть легко адаптирован к Stream
, (Каждый Spliterator
просто отслеживает текущий IP-адрес и максимальный адрес в своей доле сети.)
Другой пример из основной среды выполнения Java: DirectoryStream
для обхода файловой системы.
Пример использования: "Преобразует итератор в поток"
public static <T> Stream<T> iteratorToFiniteStream(final Iterator<T> iterator) {
final Iterable<T> iterable = () -> iterator;
return StreamSupport.stream(iterable.spliterator(), false);
}
Spliterator
является продолжением вневременного Iterator
класс, позволяющий разбивать поток объектов на итерации (Stream
работает, собирая операции перед повторением).
Я не могу вспомнить, когда бы среднему разработчику приходилось работать с Spliterator
, Collection
а также Collections
API-интерфейсы невероятно богаты Java 8, и в большинстве случаев лучше использовать ваниль Collection
подкласс вместо создания собственного Stream
интерфейс.
Пример того, когда вы можете использовать Spliterator
может быть библиотека для графиков, использующих связанную структуру данных, над которой стандарт Spliterator
/ stream()
не определено