Stream流操作-简单结果终止方法

简介: Stream流操作-简单结果终止方法

简单结果终止方法

按照前面介绍的,终止方法里面像 count 、 max 、 min 、 findAny 、 findFirst 、anyMatch 、 allMatch 、 nonneMatch 等方法,均属于这里说的简单结果终止方法。所谓简 单,指的是其结果形式是数字、布尔值或者Optional对象值等。

publicvoidtestSimpleStopOptions() {
List<String>ids=Arrays.asList("205", "10", "308", "49",
"627","193", "111", "193");
// 统计stream操作后剩余的元素个数System.out.println(ids.stream().filter(s->s.length() >2).count());
// 判断是否有元素值等于205System.out.println(ids.stream().filter(s->s.length() >2)
                       .anyMatch("205"::equals));
// findFirst操作ids.stream().filter(s->s.length() >2).findFirst()
        .ifPresent(s->System.out.println("findFirst:"+s));
}

执行后结果为:

6truefindFirst:205

避坑提醒

这里需要补充提醒下,一旦一个Stream被执行了终止操作之后,后续便不可以再读这个流执行 其他的操作了,否则会报错,看下面示例:

publicvoidtestHandleStreamAfterClosed() {
List<String>ids=Arrays.asList("205", "10", "308", "49", "627",
"193", "111", "193");
Stream<String>stream=ids.stream().filter(s->s.length() >2);
// 统计stream操作后剩余的元素个数System.out.println(stream.count());
System.out.println("-----下面会报错-----");
// 判断是否有元素值等于205try {
System.out.println(stream.anyMatch("205"::equals));
    } catch (Exceptione) {
e.printStackTrace();
    }
System.out.println("-----上面会报错-----");
}

执行的时候,结果如下:

-----下面会报错-----java.lang.IllegalStateException: streamhasalreadybeenoperateduponorclosedatjava.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:229)
atjava.util.stream.ReferencePipeline.anyMatch(ReferencePipeline.java:449)
atcom.veezean.skills.stream.StreamService.testHandleStreamAfterClosed(StreamService.java:153)
atcom.veezean.skills.stream.StreamService.main(StreamService.java:176)
-----上面会报错-----

因为stream已经被执行 count() 终止方法了,所以对stream再执行 anyMatch 方法的时候,就会报错 stream has already been operated upon or closed ,这一点在使用的时候需要特别注意。


相关文章
|
数据采集 Java
自定义 ForkJoinPool 提升并行流 ParallelStream 执行速度
简介 在 java8 中 添加了流Stream,可以让你以一种声明的方式处理数据。使用起来非常简单优雅。ParallelStream 则是一个并行执行的流,采用 ForkJoinPool 并行执行任务,提高执行速度。
7125 1
|
2月前
|
Java 容器
Stream 流常见基本操作
Stream 流常见基本操作
|
26天前
|
Java
Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)
Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)
31 0
|
26天前
|
存储 Java API
Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
Java——Stream流(1/2):Stream流入门、Stream流的创建(认识Stream、体验Stream流、Stream流的使用步骤、获取Stream流的方法)
25 0
|
10月前
|
Java 程序员
Stream流操作-结果收集终止方法-最终篇
Stream流操作-结果收集终止方法-最终篇
83 0
|
10月前
|
Java
stream流操作
stream流操作
51 0
|
12月前
|
存储
Stream流中各阶段方法说明及组合示例
Stream流中各阶段方法说明及组合示例
80 1
|
2月前
|
Java 数据处理
关于Stream流和Lambda表达式,这些技巧你都知道吗?
关于Stream流和Lambda表达式,这些技巧你都知道吗?
|
8月前
流的关闭的几种方式
流的关闭的几种方式
|
10月前
Stream流操作-结果收集终止方法-第一篇
Stream流操作-结果收集终止方法-第一篇
43 3