Java8 Stream 真香,赶紧来舔一舔
如今Java14
已经发布许久了,Java15
也在路上跑着了,然鹅不少小伙伴Java8
的API
应该还没用溜吧!今天跟各位小伙伴们聊聊Java Stream API
的具体使用方法以及应用场景。
举哥简单的例子,定义一个数组:
String[] users = new String[]{"张三","李四","王二"};
我们来使用之前的方式遍历:
for(int i=0;i<users.length;i++){ System.out.println(users[i]); }
亦或者使用:
for(String u:users){ System.out.println(u); }
使用最新的API
实现方式:
Stream<String> stream = Stream.of(users); stream.forEach(user-> System.out.println(user));
然鹅好像并没有多么方便,仅仅少撸了一行代码,下面跟大家分享一个稍微复杂一点的例子。
首先定义一个学生类:
@Data @Builder public class Student { private String name; private Integer age; private Integer sex; private Double score; }
定义基础数据:
List<Student> list = new ArrayList<>(); list.add(new Student("张三",28,1,78.9)); list.add(new Student("李四",20,1,98.0)); list.add(new Student("王二",29,0,100.0)); list.add(new Student("张三",28,1,78.5)); Stream<Student> stream = list.stream();
遍历:
stream.forEach(stu-> System.out.println(stu.getName()));
过滤性别:
stream.filter(stu -> stu.getSex()==1) .forEach(stu -> System.out.println(stu.getName()));
名字去重:
stream.distinct().forEach(stu -> System.out.println(stu.getName()));
年龄排序:
stream.sorted(Comparator.comparingInt(Student::getAge)) .forEach(stu -> System.out.println(stu.getName()));
排序反转:
stream.sorted(Comparator.comparingInt(Student::getAge).reversed()) .forEach(stu -> System.out.println(stu.getName()));
姓名集合:
List<String> userList = stream.map(stu -> stu.getName()) .collect(Collectors.toList());
分数求和:
Optional<Double> totalScore = stream.map(Student::getScore) .reduce((x, y) -> x+y); System.out.println(totalScore.get());
求分数最大值:
Optional<Double> maxScore = stream.map(Student::getScore).reduce(Double::max);
求分数最小值:
Optional<Double> minScore = stream.map(Student::getScore).reduce(Double::min);
取前三名同学:
stream.sorted(Comparator.comparingDouble(Student::getScore).reversed()) .limit(3) .forEach(System.out::println);
扔了前三名同学:
stream.sorted(Comparator.comparingDouble(Student::getScore).reversed()) .skip(3) .forEach(System.out::println);
卧槽太多了,撸主举不过来了,但是基本上常用的就这么几个。函数式编程写出的代码更加简洁且意图明确,使用stream
接口让你从此告别for
循环,小伙伴们赶紧入坑享受吧!!!
作者: 小柒
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
构建5G时代的内生安全体系
云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 一、5G是否存在杀手级用例? 第五代通信技术保证了数据传递速度,低时延和高带宽,这必将在全世界范围引起轰动。从4G的大数据时代演进至5G万物智联时代,网络安全伴随时代的改变从互联网业务和数据安全向智能安全、整体安全进发。中国信通院研究统计,到2025年中国5G用户将到达8.16亿,占移动用户的48%左右。 Gartner于2019年底发布预测,预计在2020年至2021年5G IoT终端量将增加至1130万个,是2020年数量的三倍左右。到2023年,预估5G IoT终端数量约为4,900万个。下表为2020年-2023年5G IoT终端设备数量(千台): 从上表数据中可以发现未来三年内,5G IoT的终端设备数量增长庞大,远超于4G时代的物联网设备数量,一定程度上打破了带宽限制和成本原因,作为主要连接为更多行业领域开辟新的市场机遇。与此同时,5G时代下的网络安全也要从其四大关键用例分析: 1)增强的移动带宽:快速、低延时和高带宽可以实现移动的超高清视频,VR和其他高级应用程序。但是因无...
- 下一篇
Kube-OVN 1.1.1 发布,问题修复
完整版本变更请查看 CHANGELOG Kube-OVN v1.1.1 版本主要修复 v1.1.0 版本中发现的问题 Bugfix 替换 iptables 为 legacy iptables 避免使用 nftables 的问题 挂载 etc/origin/ovn 目录到ovs-ovn 修复 go-ping 中数据错误的问题 修复yaml中的缩进问题 修复处理 networkpolicy 时可能导致 panic 的问题 Monitoring 增加图表对监控变化的灵敏度
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- CentOS关闭SELinux安全模块
- CentOS7设置SWAP分区,小内存服务器的救世主
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题