Java8新特性之流stream
《Java 8 实战》学习笔记系列
定义
流是Java API的新成员,它允许你以声明性方式处理数据集合,可以把它看成遍历数据集的高级迭代器
示例
List<String> threeHighCaloricDishNames =
menu.stream()//从menu获得流
.filter(d -> d.getCalories() > 300)//选出高热量的菜
.map(Dish::getName)//获取菜名
.limit(3)//只选3个菜
.collect(toList());//将结果保存在新的list中返回
组成
1.元素序列
接口,访问特定数据源,如集合
2.源
提供数据,如集合、数组、IO资源
3.数据处理操作
filter、map、reduce、find、match、sort等
特点
1.流水线
很多流操作本身会返回一个流,这样多个操作就可以链接起来,形成一个大的流水线
2.内部迭代
Collection是外部迭代
Stream是内部迭代
3.只能遍历消费一次
和迭代器类似,流只能遍历一次。遍历完之后,我们就说这个流已经被消费掉了。
stream 流操作
数据源
执行查询集合、数组、IO数据
中间操作
形成流水线
1.filter 谓词筛选,返回Stream,操作参数Predicate,T -> boolean
2.map 映射,返回Stream,操作参数Function<T,R>,T -> R
细分
2.1 map + Arrays.stream() 将每个数组分别转化为流
2.2 flatMap + Arrays.stream() 将多个数组分别转化为单个流
2.3 mapToIn,返回IntStream
3.limit 截断流,返回Stream
4.skip 跳过元素
5.sorted 可配合reversed,返回Stream,操作参数Comparator,(T, T) -> int
6.distinct 筛选各异的元素。可替换为在终端操作时,使用toSet()去除重复元素,返回Stream
7.range 范围
8.boxed 包装类
终端操作
生成结果
forEach 消费流中的每个元素并对其应用 Lambda。这一操作返回 void
count 返回流中元素的个数。这一操作返回 long
sum 求和
noneMatch 不匹配
collect 把流归约成一个集合,比如 List、 Map、Set 甚至是 Integer
groupingBy 分组
partitioningBy 分区,谓词返回bool
Collectors.toList() 转换
Collectors.counting() 可直接一起换成count
maxBy 最大值
summingInt 汇总
averagingInt 平均数
summarizingInt 返回一个IntSummaryStatistics对象
包括
count
sum
min
max
average
joining 连接字符串
reducing
查找和匹配
anyMatch 流中是否有一个元素匹配谓词
menu.stream().anyMatch(Dish::isVegetarian)
allMatch 流中是否全部元素匹配谓词
menu.stream().allMatch(d -> d.getCalories() < 1000)
noneMatch 流中是否没有元素匹配谓词
menu.stream().noneMatch(d -> d.getCalories() >= 1000)
findAny 找到结果时短路,立即结束
ifPresent 是否包含,如果包含可以执行代码块内容
findFirst 查找第一个
reduce 归约,例如计算求和累加、累乘、最大最小值等,代替for
并行流
parallel() 顺序流转换为并行流
parallelStream
最新文章
- windows 内部预览版与迅雷极速版不配合
- socket协议下如何缓存图片--推荐EGOCache
- 了解 JavaScript (4)&ndash; 第一个 Web 应用程序
- 清理sql2000查询分析器登录名记录
- 如何引用CSS样式表
- tcxtreelist 展示图片 图像
- Android 开发性能优化之SparseArray(一)
- MVVM学习笔记
- mysql注入攻击及防范
- Java中的ThreadLocal深入理解
- PCB行业版特色功能展示
- (转)java反射机制及简单工厂模式
- MongoDB的安装和使用指南
- [Swift]LeetCode269. 外星人词典 $ Alien Dictionary
- 升级linux python
- Openlayer3之绚丽的界面框架-Materialize
- python入门学习2
- PLSQL无法粘贴复制
- PKCS 15 个标准
- Opengl库函数列表