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


相关文章
|
8月前
|
数据采集 人工智能 运维
数据治理系统如何赋能企业?建设路径与成本全解析(2025年12月更新)
在AI与大数据时代,数据治理已成为企业业务增长的核心引擎。本文深度解析瓴羊Dataphin、字节Dataleap、奇点云DataSimba等主流系统,从赋能价值、建设路径、产品对比到成本测算,全面指导企业科学选型。尤其推荐基于阿里十年实践的瓴羊Dataphin,其以智能自动化、业务驱动和全链路能力,助力企业打破数据孤岛、提升数据质量、实现安全合规,推动数智转型与业务增值。
|
开发工具 iOS开发 开发者
「Mac畅玩鸿蒙与硬件2」鸿蒙开发环境配置篇2 - 在Mac上安装DevEco Studio
本篇将专注于如何在 Mac 上安装鸿蒙开发工具 DevEco Studio,确保开发环境能够顺利搭建。完成安装后,可以正式开始鸿蒙应用的开发工作。
1864 1
「Mac畅玩鸿蒙与硬件2」鸿蒙开发环境配置篇2 - 在Mac上安装DevEco Studio
|
网络协议
netstat 查看端口开放情况
netstat 查看端口开放情况
1072 0
|
自然语言处理 网络协议 Shell
还在付费使用 XShell?我选择这款超牛逼的 SSH 客户端,完全免费
分享过FinallShell这款SSH客户端,也是xiaoz目前常用的SSH客户端工具,FinalShell使用起来方便顺手,但令我不爽的是tab数量变多的时候FinalShell越来越卡,而且内存占用也比较高。
人工智能 缓存 前端开发
9654 47
人工智能 JavaScript 开发工具
3949 11
开发工具 Swift git
1529 2
缓存 JavaScript Shell
1812 3
人工智能 JavaScript 测试技术
1394 2