Java中的stream流编程

1.为什么要使用流?
使用流后代码可以更简短、使用并行流效率更高,不用自己做线程池和拆分
2.返回stream类型的操作是中间操作,不返回stream的操作是终止操作。
3.惰性求值就是没有终止操作的情况下,流的中间操作不会执行。
4.intStream和longStream等其实并不是stream的子类,可以使用.boxed()将它们装箱成stream。例如s.chars().boxed()
5.peek是个中间操作,一般用于debug,作用和for each 类似
limit主要用于无限流,限制无限流生成的元素的个数
6.流的终止操作分为短路操作和非短路操作,短路操作是指不需要等流全部执行完就能终止流的操作。例如findFirst/findAny等
7.reduce是终止操作,可以对流中的两个元素进行操作。
8.并行流。流中调用parallel()可以将流变成并行流。例如:
IntStream.range(1,100).parallel().peek().sum();
调用sequential()可以产生串行流。例如:
IntStream.range(1,100).sequential().peek().sum();
如果流中多次调用串行和并行,则实际以最后一次调用为准。
9.流的收集器可以将流转化成指定的类型并返回。收集器还可以将流的数据分块或者分组汇总成map的形式。例如:
Map<Grade, Long> gradesCount = stuents.stream().collect(Collectors.groupingBy(Stuent::getGrade, Collectors.counting()));
10.流的所有操作是链式操作,每个元素只迭代一次
每一个中间操作返回一个新的流。流里面有一个属性sourceStage执行同一个地方,就是head。
Head -> nextStage->nextStage->null
11.有状态操作会把无状态操作流截断,单独处理,这样流中的每个元素将不止迭代一次。有状态操作的输入一般有两个参数,而无状态操作一般只有一个参数。
12.并行状态下,有状态的中间操作不一定能并行。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值