Каков наилучший способ запросить, был ли использован поток? Думали ли когда-нибудь о чем-то похожем на Stream::isConsumed
?
Я признаю, что это похоже на следующий вопрос:
Как проверить, пуст ли поток Java 8?< /а>
Хотя кажется, что разница в том, что проверка потребления потока, по-видимому, не требует частичного потребления указанного потока. Применяются ли здесь ответы по ссылке выше?
Мой вариант использования аналогичен следующему:
/**
... This operation ensures, regardless whether the prefix or suffix stream is
parallel, that the suffix stream is computed only after the prefix stream has
been exhausted...
*/
public static <E> Stream<E> andThen(
Stream<? extends E> stream,
Supplier<? extends Stream<? extends E>> after);
EDIT (23.04.18), показывающий детали реализации, не так важен.
В andThen
stream
должен исчерпать перед добавлением оставшихся элементов, созданных after
.
Конечно, некоторые могут предпочесть писать Spliterator
, но даже в этом случае, если вы пишете trySplit
, вы можете захотеть узнать, исчерпали ли дочерние элементы, разделенные от разделителя префикса, свои элементы (блокирующие, если нет...?) перед разделением суффикса; вы, вероятно, не захотите преждевременно использовать какие-либо префиксные элементы для этого.
Связано немного; вероятно ортогональный; будет ли вообще полезен заглядывающий сплитератор?
abstract boolean tryPeek(Consumer<? super E> action);
abstract boolean skip();
default boolean tryAdvance(Consumer<? super E> action) {return tryPeek(action) && skip();}
Stream
всегда следует считать бесконечным, если не указано иное. Во-вторых, ваш.filter(__ -> buffer.remainingCapacity() == 0)
не является подходящим фильтром; предикат должен проверять элемент потока, который он фильтрует, а не внешнее состояние. - person daniu   schedule 22.04.2018peek
потребитель не может применяться перед предикатомfilter
, не может применяться перед функциейmap
? Возможно, я сделал это неправильно: stuartmarks.wordpress.com/ 09.01.2015/ - person bizness86   schedule 24.04.2018