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流返回Optional与isPresent()==false?第二,为什么不Stream.concatenate()正确连接这样的Stream.of()创建流?
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>,而不是一个Stream的Stream第 因此findFirst()消耗整个组合Stream,而不仅仅是Stream用于创建组合的第一个组合Stream.
| 归档时间: |
|
| 查看次数: |
95 次 |
| 最近记录: |