Stream流操作-结果收集终止方法-第一篇

简介: Stream流操作-结果收集终止方法-第一篇

因为Stream主要用于对集合数据的处理场景,所以除了上面几种获取简单结果的终止方法之外, 更多的场景是获取一个集合类的结果对象,比如List、Set或者HashMap等。

这里就需要 collect 方法出场了,它可以支持生成如下类型的结果数据:

  • 一个 集合类 ,比如List、Set或者HashMap等
  • StringBuilder对象,支持将多个 字符串进行拼接 处理并输出拼接后结果
  • 一个可以记录个数或者计算总和的对象( 数据批量运算统计 )

生成集合

应该算是collect最常被使用到的一个场景了:

publicvoidtestCollectStopOptions() {
List<Dept>ids=Arrays.asList(newDept(17), newDept(22), newDept(23));
// collect成listList<Dept>collectList=ids.stream().filter(dept->dept.getId() >20)
    .collect(Collectors.toList());
System.out.println("collectList:"+collectList);
// collect成SetSet<Dept>collectSet=ids.stream().filter(dept->dept.getId() >20)
    .collect(Collectors.toSet());
System.out.println("collectSet:"+collectSet);
// collect成HashMap,key为id,value为Dept对象Map<Integer, Dept>collectMap=ids.stream().filter(dept->dept.getId() >20)
    .collect(Collectors.toMap(Dept::getId, dept->dept));
System.out.println("collectMap:"+collectMap);
}

结果如下:

collectList:[Dept{id=22}, Dept{id=23}]
collectSet:[Dept{id=23}, Dept{id=22}]
collectMap:{22=Dept{id=22}, 23=Dept{id=23}}

生成拼接字符串

将一个List或者数组中的值拼接到一个字符串里并以逗号分隔开,这个场景相信大家都不陌生 吧?

如果通过 for 循环和 StringBuilder 去循环拼接,还得考虑下最后一个逗号如何处理的问题, 很繁琐:

publicvoidtestForJoinStrings() {
List<String>ids=Arrays.asList("205", "10", "308", "49", "627",
"193", "111", "193");
StringBuilderbuilder=newStringBuilder();
for (Stringid : ids) {
builder.append(id).append(',');
    }
// 去掉末尾多拼接的逗号builder.deleteCharAt(builder.length() -1);
System.out.println("拼接后:"+builder.toString());
}

但是现在有了Stream,使用 collect 可以轻而易举的实现:

publicvoidtestCollectJoinStrings() {
List<String>ids=Arrays.asList("205", "10", "308", "49", "627",
"193", "111", "193");
StringjoinResult=ids.stream().collect(Collectors.joining(","));
System.out.println("拼接后:"+joinResult);
}

两种方式都可以得到完全相同的结果,但Stream的方式更优雅:

拼接后:205,10,308,49,627,193,111,193


相关文章
|
12月前
|
前端开发 机器人 API
前端大模型入门(一):用 js+langchain 构建基于 LLM 的应用
本文介绍了大语言模型(LLM)的HTTP API流式调用机制及其在前端的实现方法。通过流式调用,服务器可以逐步发送生成的文本内容,前端则实时处理并展示这些数据块,从而提升用户体验和实时性。文章详细讲解了如何使用`fetch`发起流式请求、处理响应流数据、逐步更新界面、处理中断和错误,以及优化用户交互。流式调用特别适用于聊天机器人、搜索建议等应用场景,能够显著减少用户的等待时间,增强交互性。
3068 2
langchain 入门指南 - 使用 Agent
langchain 入门指南 - 使用 Agent
404 0
|
7月前
|
人工智能 自然语言处理 程序员
用通义灵码开发一个Python时钟:手把手体验AI程序员加持下的智能编码
通义灵码是基于通义大模型的AI研发辅助工具,提供代码智能生成、研发问答、多文件修改等功能,帮助开发者提高编码效率。本文通过手把手教程,使用通义灵码开发一个简单的Python时钟程序,展示其高效、智能的编码体验。从环境准备到代码优化,通义灵码显著降低了开发门槛,提升了开发效率,适合新手和资深开发者。最终,你将体验到AI加持下的便捷与强大功能。
|
11月前
|
数据可视化 前端开发 UED
低代码可视化-Uniapp Cascader级联选择器-代码生成器
Cascader级联选择器是一种常用的UI组件,适用于从具有层级关系的数据中进行选择,如省市区选择、公司层级选择等。它通过分组多列展示选项,支持多级分类、联动选择、搜索与过滤等功能。组件具备自定义样式、禁用选项、清空选项等特性,广泛应用于电商、企业内部系统等场景。代码示例展示了其详细的实现和调用方法。
438 7
低代码可视化-Uniapp Cascader级联选择器-代码生成器
|
11月前
|
消息中间件 安全 Java
Java“NoInitialContextException”问题解决
Java中“NoInitialContextException”异常通常发生在JNDI(Java命名和目录接口)查找时缺少初始上下文配置。解决方法包括:确保JNDI提供者URL正确、添加必要的库文件、配置jndi.properties文件或在代码中显式指定InitialContext环境属性。
276 1
|
数据采集 Web App开发 数据处理
一步步教你用Python Selenium抓取动态网页任意行数据
使用Python Selenium爬取动态网页,结合代理IP提升抓取效率。安装Selenium,配置代理(如亿牛云),设置User-Agent和Cookies以模拟用户行为。示例代码展示如何使用XPath提取表格数据,处理异常,并通过隐式等待确保页面加载完成。代理、模拟浏览器行为和正确配置增强爬虫性能和成功率。
1782 3
一步步教你用Python Selenium抓取动态网页任意行数据
|
关系型数据库 MySQL OLTP
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
【8月更文挑战第6天】使用 pt-query-digest 工具分析 MySQL 慢日志性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
719 0
性能工具之 MySQL OLTP Sysbench BenchMark 测试示例
|
分布式计算 搜索推荐 Hadoop
03 Hadoop国内外应用案例介绍
03 Hadoop国内外应用案例介绍
797 0
|
Java 程序员
Stream流操作-结果收集终止方法-最终篇
Stream流操作-结果收集终止方法-最终篇
206 0
|
Oracle 关系型数据库 数据库
实时计算 Flink版产品使用问题之连接到Oracle数据库但无法读取到数据,是什么导致的
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。