《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

最新文章

  1. windows 内部预览版与迅雷极速版不配合
  2. socket协议下如何缓存图片--推荐EGOCache
  3. 了解 JavaScript (4)&ndash; 第一个 Web 应用程序
  4. 清理sql2000查询分析器登录名记录
  5. 如何引用CSS样式表
  6. tcxtreelist 展示图片 图像
  7. Android 开发性能优化之SparseArray(一)
  8. MVVM学习笔记
  9. mysql注入攻击及防范
  10. Java中的ThreadLocal深入理解
  11. PCB行业版特色功能展示
  12. (转)java反射机制及简单工厂模式
  13. MongoDB的安装和使用指南
  14. [Swift]LeetCode269. 外星人词典 $ Alien Dictionary
  15. 升级linux python
  16. Openlayer3之绚丽的界面框架-Materialize
  17. python入门学习2
  18. PLSQL无法粘贴复制
  19. PKCS 15 个标准
  20. Opengl库函数列表

热门文章

  1. 使用for循环疑难问题
  2. Meta标签基本使用
  3. StreamSets使用指南
  4. 使用records库操作SQL并且查询MySQL数据库
  5. Unity 游戏框架搭建 2019 (五十、五十一) 消息机制小结&amp;MonoBehaviourSimplify 是框架?
  6. unicode、encode、decode
  7. Java实现 LeetCode 328 奇偶链表
  8. Java实现 蓝桥杯VIP 算法提高 分苹果
  9. Java 虚拟机是如何判定两个 Java 类是相同的?
  10. Java实现 蓝桥杯 历届试题 网络寻路