Java 8 Stream 流已被操作或关闭

在Java 8中,Stream不能重复使用,一旦被消耗或使用,流将被关闭,类似流水线,水龙头的水一样一去不复返

示例 – 流关闭

查看以下示例,它会抛出一个IllegalStateException,表示“流被关闭”。

TestJava8.java

package com.mkyong.java8;  import java.util.Arrays; import java.util.stream.Stream;  public class TestJava8 {  public static void main(String[] args) {  String[] array = {"a", "b", "c", "d", "e"}; Stream<String> stream = Arrays.stream(array);  // loop a stream stream.forEach(x -> System.out.println(x));  // reuse it to filter again! throws IllegalStateException long count = stream.filter(x -> "b".equals(x)).count(); System.out.println(count);  }  }

Output

java.lang.IllegalStateException: stream has already been operated upon or closed
	at java.util.stream.AbstractPipeline.(AbstractPipeline.java:203)
	at java.util.stream.ReferencePipeline.(ReferencePipeline.java:94)
	at java.util.stream.ReferencePipeline$StatelessOp.(ReferencePipeline.java:618)
	at java.util.stream.ReferencePipeline$2.(ReferencePipeline.java:163)
	at java.util.stream.ReferencePipeline.filter(ReferencePipeline.java:162)
	at com.hostingcompass.whois.range.run.TestJava8.main(TestJava8.java:25)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144)

示例 – 重用流

TestJava8.java

package com.mkyong.java8; import java.util.function.Supplier; import java.util.stream.Stream; public class TestJava8 { public static void main(String[] args) { String[] array = {"a", "b", "c", "d", "e"}; Supplier<Stream<String>> streamSupplier = () -> Stream.of(array); //get new stream streamSupplier.get().forEach(x -> System.out.println(x)); //get another new stream long count = streamSupplier.get().filter(x -> "b".equals(x)).count(); System.out.println(count); } }

Output

a 
b 
c 
d 
e 
1

每个
get()
都会返回一个新的流

    原文作者:最后的miku殿下
    原文地址: https://blog.csdn.net/Hatsune_Miku_/article/details/73433261
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞