Java 如何在执行一个操作后重用流
我想找出两次使用相同的Java 如何在执行一个操作后重用流,java,java-8,java-stream,Java,Java 8,Java Stream,我想找出两次使用相同的流以特定字符开头的字符串,但第二次流操作引发异常。如何重新使用流 public static void main(String[] args) { Stream<String> stream = Stream.of("abc", "aef", "bcd", "bef", "crf"); stream.filter(s -> s.startsWith("a")).forEach(System.out::println);; strea
流以特定字符开头的字符串,但第二次流操作引发异常。如何重新使用流
public static void main(String[] args) {
Stream<String> stream = Stream.of("abc", "aef", "bcd", "bef", "crf");
stream.filter(s -> s.startsWith("a")).forEach(System.out::println);;
stream.filter(s -> s.startsWith("b")).forEach(System.out::println);;
}
publicstaticvoidmain(字符串[]args){
流量=流量(“abc”、“aef”、“bcd”、“bef”、“crf”);
stream.filter(s->s.startsWith(“a”)).forEach(System.out::println);;
stream.filter(s->s.startsWith(“b”)).forEach(System.out::println);;
}
例外情况
Exception in thread "main" java.lang.IllegalStateException: stream has already been operated upon or closed
at java.util.stream.AbstractPipeline.<init>(Unknown Source)
at java.util.stream.ReferencePipeline.<init>(Unknown Source)
at java.util.stream.ReferencePipeline$StatelessOp.<init>(Unknown Source)
at java.util.stream.ReferencePipeline$2.<init>(Unknown Source)
at java.util.stream.ReferencePipeline.filter(Unknown Source)
at StreamExp.main(StreamExp.java:13)
线程“main”java.lang.IllegalStateException中的异常:流已被操作或关闭
位于java.util.stream.AbstractPipeline。(未知源)
位于java.util.stream.ReferencePipeline。(未知源)
位于java.util.stream.ReferencePipeline$StatelessOp。(未知源)
位于java.util.stream.ReferencePipeline$2。(未知源)
位于java.util.stream.ReferencePipeline.filter(未知源)
位于streamxp.main(streamxp.java:13)
您不能在同一流上执行两次终端操作,例如forEach
你还有其他选择。例如,您可以生成一个映射
,其中输入的字符串
按其第一个字符分组:
Map<Character,List<String>> groups =
Stream.of("abc", "aef", "bcd", "bef", "crf")
.collect(Collectors.groupingBy(s->s.charAt(0)));
使用逻辑或将您的流合并为一个流:
public static void main(String[] args) {
Stream<String> stream = Stream.of("abc", "aef", "bcd", "bef", "crf");
stream.filter(s -> s.startsWith("a") || s.startsWith("b")).forEach(System.out::println);
}
publicstaticvoidmain(字符串[]args){
流量=流量(“abc”、“aef”、“bcd”、“bef”、“crf”);
stream.filter(s->s.startsWith(“a”)| | s.startsWith(“b”)).forEach(System.out::println);
}
当您调用任何终端操作时,流已关闭,您可以使用流供应商构建新流
Supplier<Stream<String>> streamSupplier =
() -> Stream.of("abc", "aef", "bcd", "bef", "crf");
streamSupplier.get().filter(s -> s.startsWith("a")).forEach(System.out::println);
streamSupplier.get().filter(s -> s.startsWith("b")).forEach(System.out::println);
Supplier-streamSupplier=
()->“abc”、“aef”、“bcd”、“bef”、“crf”流;
streamSupplier.get().filter(s->s.startsWith(“a”)).forEach(System.out::println);
streamSupplier.get().filter(s->s.startsWith(“b”).forEach(System.out::println);
Supplier<Stream<String>> streamSupplier =
() -> Stream.of("abc", "aef", "bcd", "bef", "crf");
streamSupplier.get().filter(s -> s.startsWith("a")).forEach(System.out::println);
streamSupplier.get().filter(s -> s.startsWith("b")).forEach(System.out::println);