Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/376.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 查询流是否已使用(未使用)_Java_Java Stream_Stateful_Spliterator - Fatal编程技术网

Java 查询流是否已使用(未使用)

Java 查询流是否已使用(未使用),java,java-stream,stateful,spliterator,Java,Java Stream,Stateful,Spliterator,查询流是否已被使用的最佳方法是什么?是否考虑过类似于Stream::isConsumed的东西 我承认这与以下问题类似: 尽管如此,区别似乎在于检查流消耗似乎不需要部分消耗所述流。上面链接的答案也适用于这里吗 我的用例类似于以下内容: /** ... This operation ensures, regardless whether the prefix or suffix stream is parallel, that the suffix stream is compute

查询流是否已被使用的最佳方法是什么?是否考虑过类似于
Stream::isConsumed
的东西

我承认这与以下问题类似:

尽管如此,区别似乎在于检查流消耗似乎不需要部分消耗所述流。上面链接的答案也适用于这里吗

我的用例类似于以下内容:

/**
   ... 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);

我认为这不是流的有效用法。首先,如果不以其他方式记录,
应始终被视为是无限的。第二,你的
.filter(\uu->buffer.remainingCapacity()==0)
不是一个合适的过滤器;谓词应该检查它所过滤的流的元素,而不是外部状态。为了进一步阐述@daniu的注释,您的整个代码依赖于关于函数处理顺序的假设。处理顺序被明确指定为未定义。@霍尔格,你能澄清一下吗;因此,对于每个元素,
peek
使用者可能不会在
过滤器
谓词之前应用,而不会在
map
函数之前应用?也许,我做错了:@bizness86那篇文章已经提到了未指明的评估顺序的后果;对于并行流,如果有多个元素具有相同的属性值,则该有状态谓词将选择任意元素。它说,这将对顺序流执行预期的操作,但必须强调的是,该规范甚至不能保证对顺序流的评估顺序(在预发布版本中有这样一句话,但在最终版本之前已被有意删除)。@Holger我明白了;是的,如果平行,这将是预期的行为;我将据此记录。我不知道没有连续流的保证;我主要关心的是仅在消耗初始流之后才计算/附加留在缓冲区中的剩余元素。链接的问题询问有关检查空流的问题,但这可能需要使用元素。检查流是否被消费似乎不需要消费元素;但是,无法检查流或拆分器。
abstract boolean tryPeek(Consumer<? super E> action);
abstract boolean skip();
default boolean tryAdvance(Consumer<? super E> action) {return tryPeek(action) && skip();}