与Stream.of()的Java 8错误 - 像流和连接它们?

pab*_*o53 1 java concatenation illegalstateexception java-stream

为什么以下java 8代码在第二次调用get()时显示错误?

    Stream<String> aStream = Stream.concat(Stream.of("A"), Stream.of("B"));
    String a = stream.findFirst().get();
    String b = stream.findFirst().get();
Run Code Online (Sandbox Code Playgroud)

"aStream"流应该看到两个值:"A"和"B".但是,在第一个元素已被消耗之后尝试读取任何内容

    java.lang.IllegalStateException: stream has already been operated upon or closed
Run Code Online (Sandbox Code Playgroud)

这不是Java 8中的错误吗?首先,为什么不消耗的Stream.of()-created流返回OptionalisPresent()==false?第二,为什么不Stream.concatenate()正确连接这样的Stream.of()创建流?

Era*_*ran 6

Stream.concatenate()确实连接了两个Stream.然而,一旦你执行相结合的终端操作Stream- stream.findFirst()-你不能做任何事情与Stream.你只能运行一个终端操作Stream.这就是为什么它被称为"终端".

如果要获取组合中的多个元素Stream,请使用不同的终端操作,例如collect:

List<String> list = stream.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

为了澄清,组合Stream是单Stream<String>,而不是一个StreamStream第 因此findFirst()消耗整个组合Stream,而不仅仅是Stream用于创建组合的第一个组合Stream.


归档时间:

查看次数:

95 次

最近记录:

7 年,9 月 前