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 ,这一点在使用的时候需要特别注意。


相关文章
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
3640 2
|
关系型数据库 MySQL 数据库
rds迁移数据迁移工具选择
rds迁移数据迁移工具选择
598 3
|
4月前
|
消息中间件 人工智能 机器人
vx自动回复机器人,ai自动回复机器人,微信自动回复脚本插件
这个微信自动回复机器人包含主程序、配置管理、工具函数和单元测试模块。主程序使用itchat库实现微信登录和消息处理
|
运维 Linux Apache
Docker详解(十二)——Docker容器权限问题
Docker详解(十二)——Docker容器权限问题
3763 5
|
JavaScript 前端开发 开发者
|
人工智能 自然语言处理 算法
揭秘AI写作助手:技术原理与应用实践
在数字化浪潮的推动下,人工智能(AI)正逐步渗透到我们工作和生活的方方面面。本文将深入探讨AI写作助手的技术原理及其在不同场景的应用实例,旨在揭示这项技术如何助力内容创作、提升效率和质量。通过分析其背后的算法、数据处理方式以及实际运用效果,读者可以获得对AI写作工具更全面的认识,并了解如何利用这些工具优化自身的写作流程。
|
弹性计算 搜索推荐 安全
如何编写有效的Prompt模板:提升大模型性能的关键
在大模型应用中,编写有效的Prompt至关重要。本文介绍了如何编写高质量的Prompt模板,包括明确任务定义、选择高质量示例、优化任务指示和调整示例顺序。详细探讨了百炼平台提供的三种主要Prompt模板(ICIO、CRISPE、RASCEF)及静态和动态样例库的创建与应用,帮助提升模型性能。
934 0
|
自然语言处理 Java 索引
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
SpringBoot 实现 elasticsearch 查询操作(RestHighLevelClient 的案例实战)
752 1
|
Java 关系型数据库 数据库连接
SpringBoot(二)【整合第三方技术】
SpringBoot(二)【整合第三方技术】
|
Java 测试技术 Maven
《手把手教你》系列基础篇之(二)-java+ selenium自动化测试-环境搭建(下)基于Maven(详细教程)
【2月更文挑战第11天】《手把手教你》系列基础篇之(二)-java+ selenium自动化测试-环境搭建(下)基于Maven(详细教程) 是一个软件项目管理和综合工具。基于项目对象模型(POM)的概念,Maven可以从一个中心资料片管理项目构建,报告和文件。由于现在企业和公司中Java的大部分项目都是基于Maven, 因此宏哥为了照顾到企业或者公司用的java项目中用到maven的童鞋或者小伙伴们,这里也简单的介绍和分享一下。在Maven项目中使用Selenium. 非常简单。
604 3