Какой будет хороший сценарий использования 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() не определено

Другие вопросы по тегам