Java `Iterator` to` Stream`, который использует `Iterator` при работе терминала - PullRequest
0 голосов
/ 31 мая 2019

Предположим, у вас есть ленивый Iterator, который вы хотели бы преобразовать в Stream.Можно предположить, что число элементов в Iterator конечно.

Можно указать Iterator пропустить элементы (с помощью метода skip в реализации), чтобы избежать ненужных элементовгенерация, но все элементы Iterator должны были быть либо пропущены, либо сгенерированы после того, как для Stream была вызвана терминальная операция.

Мне известно:

StreamSupport.stream(
        Spliterators.spliteratorUnknownSize(
                theIterator, Spliterator.ORDERED), false);

для генерации Stream из Iterator, однако это не дает возможности пропустить или обеспечить потребление всех элементов.

Существуют ли какие-либо базовые реализации Stream, которые позволили бы это с помощью разумногопростое расширение?

Делегирование выглядит беспорядочным, учитывая огромное количество методов интерфейса Stream, без каких-либо обещаний относительно того, какие из них будут вызывать как часть их внутренней реализации, и все реализации JDK, которые можно использовать какотправная точка (по крайней мере в JDK, которую я использую) является частной, и я предполагаю, что для этого есть веские причины (например, они этого не делают).хотите меня расширяя их ...).

1 Ответ

0 голосов
/ 31 мая 2019

Ну, я взялся за это. Идея состояла в том, чтобы создать TypeAdapter для Stream s при чтении через gson для массивов json, без необходимости преобразования каждого элемента:

https://github.com/BeUndead/gson-stream

Из моего быстрого цикла тестирования он делает все, что я хотел, но есть почти наверняка проблемы, с которыми я не столкнулся при быстром тестировании.

...