1252-lambda-Stream流
2020-06-28 11:01:03 0 举报
AI智能生成
lambda, stream, java8, jdk1.8
作者其他创作
大纲/内容
为什么要Stream?
能做什么?
java8的Stream是对集合对象功能的增强
专注于对集合对象进行各种非常便利,高效的聚合操作
或者大批量数据操作。
优点?
极大的提高编程效率和程序可读性
提供串行和并行两种模式进行汇聚操作,
并发模式能够充分利用多核处理器的优势
使用fork/join并行方式来拆分任务和加速处理过程
java7的fork/join
通常编写并行代码很容易出错,但使用StreamAPI
无需编写多线程代码,就可以很方便的写出高性能的并发程序
所以,java.util.stream是一个函数式语言+多核时代综合影响的产物
什么是Stream
什么是聚合操作?
传统中,java代码不得不依赖于关系型数据库的聚合操作
1、平均
2、最值
3、时间内某状态的
4、取其中什么条件下的。
之前的java并没有提供有效的方法
需要iterator遍历
笨拙,低效的方法
什么是流
高级版的iterator
单向不可反复
只能遍历一次,如同水流
隐式的在内部进行遍历
可以并行操作
iterator只能串行,一个个处理
Stream可以把数据分成多个段
其中每个都在不同线程中处理,最后将结果一起输出
数据源本身可以是无限的
流的构成
使用一个流分哪几步?
1、获取一个数据源
2、数据转换
3、执行操作获取结果
每次转换原有的stream不变,返回1个新的Stream对象
流的类型?
惰性求值
Intermediate
打开流,过滤,映射,返回新的流
只是调用方法,没有真的开始流的遍历
及早求值
Terminal
一个流只能有一次结果操作
无法进行第二次
使用后流就用掉了,是流的最后一个操作
真正流的遍历,会生成一个结果
Short-circuiting
无限大时,返回有限新Stream
无限大时,在有限时间算出结果
流的构造与转换
见代码-12lambdaWebTest
构造方法
list.Stream()
Stream stream = Stream.of("a","a","c")
Arrays
Stream = Stream.of(arrays)
Arrays.stream(arrays)
基本数值型
三中对应的包装类型Stream
intStream
用这种
Stream
装箱拆箱慢
LongStream
DoubleStream
一个流只能使用一次
Optional
可读性更好
提供编译时检查
极大降低NPE这种runtimeException对程序的影响
迫使程序员更早的发现处理空值问题
而不是留在运行时
自由主题
0 条评论
下一页