Lambda表达式(二)之Stream

1. Stream API简介:

A sequence of elements supporting sequential and parallel aggregate operations.

先来看看Java里面是怎么定义Stream的我们来解读一下上面的那句话:

1.可以支持顺序和并行的对原Stream进行汇聚的操作; 2.Stream是元素的集合,这点让Stream看起来用些类似Iterator;

我们可以把Stream当成一个高级版本的Iterator,原始版本的Iterator,用户需要一个一个的遍历元素并对其执行某些操作;Stream用户只要给出需要对元素执行操作,比如“过滤、排序、分组、聚合。Stream API 配合Lambda表达式可以提高代码可读性和编码效率,Stream API也支持并行操作,我们不用再花费很多精力来编写容易出错的多线程代码,Stream API已经替我们做好了,并且充分利用多核CPU的优势。借助Stream API和Lambda,开发人员可以很容易的编写出高性能的并发处理程序。1.1 Stream 初体验 Stream API是Java 8中加入的一套新的API,主要用于处理集合操作,不过它的处理方式与传统的方式不同,称为“数据流处理”。流(Stream)类似于关系数据库的查询操作,是一种声明式操作。比如要从数据库中获取所有年龄大于30岁的用户,并按照用户的年龄大小进行排序,用一条SQL语句就可以搞定,不过使用Java程序实现就会显得有些繁琐,这时候可以使用流:

1.2 剖析Stream语法:

a:创建Stream(流)

b:转换成新的Stream

c:聚合结果

1.3 集合和流做一个对比:

集合在java中是一个容器用于存放数据,流不关心数据它只关心如何处理数据,相当于Iterator但比Iterator强大很多。

集合、流遍历方式,集合一般遍历用froeach,这种方式称为外部迭代,而流用得是内部迭代,我们只需要告诉它接下来要干什么。

1.4 注意事项:

流只能遍历一次,遍历完流会自动关闭,如再需要遍历需要重新再获取一个流,一个流遍历两次会抛出:java.lang.IllegalStateException: stream has already been operated upon or closed

2.创建流

2.1 Stream静态方法创建流

2.2 数组创建流

2.3 文件创建流

2.4 函数创建流

3. 流API应用

  • filter():对流元素过滤

  • distinct()去重

  • 其他方法就不画图很好理解,留给读者思考

  • limit():截取流中前面几个元素

  • skip():跳过流中前面几个元素

  • toArray():将流转换为数组

  • reduce():对流中的元素归约操作,将每个元素合起来形成一个新的值

  • collect():对流的汇总操作,比如输出成List集合

  • anyMatch():匹配流中的元素,类似的操作还有allMatch()noneMatch()方法

  • findFirst():查找第一个元素,类似的还有findAny()方法

  • max():求最大值

  • min():求最小值

  • count():求总数

4. 聚合

前面两部分主要做的是创建流及中间流的各种处理,现在来介绍聚合(数据收集),用到主要方法collect(),将流中的元素累积成一个汇总结果,具体的做法是通过定义新的Collector接口来定义的。具体来看(最常用的toList())

Collectors工具类为我们提供了用于汇总的方法包括 summarizingInt()summarizingLong()和summarizingDouble(),由于图书的价格为Double类型,这里年龄是int类型,所以用summarizingInt():

4.2 分组:类似mysql group关键字


介绍到这里相信你对Stream有一定了解,下一期会讲解Optional。

代码地址github:

https://github.com/nonhung/nonhung/

你点赞是对我最大支持,你评论是对我最大帮助



转载于:https://juejin.im/post/5ba5f113e51d450e9c55718d

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值