java8 stream
时间:2022-05-06
本文章向大家介绍java8 stream,主要内容包括定义Stream、使用Stream、map方法的使用、flatMap的使用和map一样、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
转载:猿天地 链接:http://cxytiandi.com/blog/detail/2220
Stream 作为 Java 8 的一大亮点,我个人是非常喜欢用的,用起来爽多了。
定义Stream
可以通过of来定义stream,也可以通过集合来转成stream。
Stream<String> stream =
Stream.of("java", "css", "php");
stream = Arrays.asList(
"张三", "张三丰", "张大佛爷", "张").stream();
也可以使用generate产生无限数量的stream,当然可以用limit方法限制
下面的语句将产生无数的随机数字,将一直循环下去
Stream<Double> dsStream =
Stream.generate(Math::random);
dsStream.forEach(System.out::println);
使用Stream
filter方法的使用,filter顾名思义,过滤的作用,怎么过滤呢?
比如说我们有个姓名的集合,想要统计出集合里名字的字数大于1的数量有多少?
首先是不使用stream的传统方法
List<String> contents =
Arrays.asList("张三", "张三丰", "张大佛爷", "张");
int count = 0;
for (String con : contents) {
if(con.length() > 1) {
count++;
}
}
System.out.println(count);
下面是使用stream之后的代码,一行就搞定了,在filter方法里用lambda表达式进行过滤,然后用count方法统计出符合条件的数量。
long new_count = contents.stream()
.filter(con -> con.length() > 1).count();
System.out.println(new_count);
当然如果你的数据量比较多,而你希望统计的速度更快时,可以使用并行处理的stream来操作。
new_count = contents.parallelStream()
.filter(con -> con.length() > 1).count();
map方法的使用
map其实就是将stream中的数据映射成 output Stream 的另外一个元素。全部循环的过一遍。
使用map可以将stream中的值都转成大小写,如果用List的话还得循环变量然后取toUpperCase()
Stream<String> stream =
Stream.of("java", "css", "php");
stream.map(String::toUpperCase)
.forEach(System.out::println);
flatMap的使用和map一样
不同的点在于flatMap是将多个stream中的多个数据集合连接起来成为一个最终的stream。
Stream<List<Integer>> number_stream =
Stream.of(
Arrays.asList(10),
Arrays.asList(22, 33),
Arrays.asList(44, 55, 66)
);
number_stream.flatMap((c) -> c.stream())
.forEach(System.out::println);
最终的结果就变成了Stream 输出结果就是10,22,33,44,55,66
- 博客网页导致电脑CPU飙升的问题解决记录
- 恢复WordPress分类目录的别名链接形式
- 替代crontab,统一定时任务管理系统cronsun简介
- 小网站最简单实用的动静分离优化方案
- Haproxy进阶管理:命令行控制后端节点上下线
- 网站集成打字震动特效JS代码改进版
- Linux基础知识之文件隐藏属性
- Linux系统chmod误操作目录权限恢复方法
- 结合VBS,实现批处理自动以管理员身份执行
- ASM 翻译系列第三十六弹:ACFS磁盘组的重平衡操作
- Linux基础知识之xargs命令
- HDU-------(2795)Billboard(线段树区间更新)
- ASM 翻译系列第三十七弹:ASM密码文件目录
- 发现插件生成的robots.txt不能被谷歌和360识别
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- [漏洞复现] 二.Windows远程桌面服务漏洞(CVE-2019-0708)复现及详解
- 本地scratch-gui和blockly安装
- 用Python打造一款文件搜索工具,所有功能自己定义!
- 解决SSH登录缓慢
- Html ul、li Css标签详解 使用图片自定义样式 隐藏小点样式齐全
- TRTC Android端开发接入学习之实现视频通话(五)
- 让WordPress默认用户无法进入后台
- 图像处理笔记(2)----OpenCV imread函数详解
- 面试官:来写个代码求一下两个数的最大公约数吧
- 聊聊BitCaskLock
- 自动化构建工具~Maven
- 聊聊BitCaskKeyDir
- 使用 Node.js 定制你的技术雷达:上篇
- css画div对角线
- redis学习笔记--redis过期机制学习