java8新特性之stream

上一章我们讲了java8新特性之lambda表达式,作为一个匿名函数,极大的简化了代码。今天我们来聊聊java8的另一个可以简化代码的特性——stream。

lambda表达式是stream的基础,建议先学习lambda表达式在学习stream相关知识。

1、首先,stream是什么?

刚接触可能觉得stream和对文件进行操作的io流类似,但实际上这两者一点关系都没有。

stream是一个数据渠道,用于操作数据源(集合、数组等)所生产的元素序列(用人话说就是它是来操作集合数组里的元素的)

2、stream怎么用?

一般来说stream操作分3大步骤:

  • 创建stream:从一个数据源(如:集合、数组)获取一个流
  • 中间操作链:对数据源的数据进行处理
  • 终止操作:执行中间操作链,并产生结果

创建流的方式:

一、collection提供了2个方法stream()和parallelstream()

二、Array提供了stream()

三、Stream的静态方法of()

四、创建无限流

无限流的创建应为使用了迭代器,查看iterate的实现可以看到

也就是说,迭代器会一直执行,这样一直创建无限个对象的流,我们称为无限流。

除了iterate还有generate也可以创建无限流:

中间操作链:

多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何的处理!而在终止操作时一次性全部处理,这种方式称为“惰性求值”。

筛选:

filter:接收lambda,从流中排除某些元素

limit:截断流,截取指定数量的元素

skip:跳过指定数量的元素,与limit互补

distinct:筛选,通过流中元素的hashcode和equals方法去除重复元素

映射:

map:接收lambda,将流中元素按给定的方法映射成一个新的元素,最后返回一个新的流

flatMap:接收一个函数作为参数,将流中的每个值换成另一个流,然后把所有流连接成一个流

排序:

sorted:自然排序

sorted(Comparator<? super T> comparator):自定排序

终止操作:

终止操作会从流的流水线上生成结果,其结果可以是任何不适流的值,例如:list,String

查找与匹配:

allMatch:检查是否匹配所有元素

anyMatch:检查是否至少匹配一个元素

noneMatch:检查是否没有匹配所有元素

findFirst:返回第一个元素

findAny:返回流中任意元素

count:返回流中元素的和

max:返回流中最大值

min:返回流中最小值

forEach:迭代所有元素

规约:

reduce(T identity, BinaryOperator) / reduce(BinaryOperator) :将流中元素反复结合起来,得到一个值

收集:

collect(Collector c):将流转换为其他形式

以上就是流完整的使用过程。

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值