Java8实战读书笔记
2021-08-17 10:31:39 8 举报
AI智能生成
Java8 实战读书笔记
作者其他创作
大纲/内容
为什么要学习Java8
为了保障Java开发职业生涯的可持续发展
Java8核心思想
函数式编程思想
什么是函数式编程
纯粹的函数式编程
使用函数编程,函数没有任何副作用
Java函数式编程
使用函数编程,函数有一定副作用但是对调用者是无法感知的
函数只能修改本地变量
它引用的对象都是不可变对象
无异常抛出,只能由return返回一个结果
特点
相对于指令式编程,函数式编程只需要指出做什么而不用关心如何做,采用声明式的方式
如何实现函数式编程
使用函数编程
函数的特性
无副作用
指函数接收输入,并通过return返回结果,无其他任何的影响,无共享变量被修改、无异常抛出、无文件操作等
引用透明性
如果一个函数只要传递同样的参数就能返回同样的结果,那这个函数就是引用透明的
高级特性
高阶函数
一个函数接收一个函数参数并返回一个函数作为结果
科里化
是指函数具有转化的特性 f(x,y) = (g(x))(y) ,从左到右转化
持久化数据结构
不修改任何全局数据结构或者作为参数传递的数据结构
延迟计算
使用函数参数,在真正使用的时候才执行函数方法
Java8核心技术
lambda表达式
在哪里可以使用lambda表达式
方法引用
局部变量方法引用,定义好的实例变量 变量名::方法名
实例方法引用
改实例为调用lambda的输入参数 类名称::方法名
静态方法引用 类名称::方法名
构造函数的引用 类名称::NEW
数组的引用 Type []::new
函数式接口
只有一个抽象方法的接口
lambda表达式语法格式
参数列表、箭头、lambda主体
在哪里可以使用lambda表达式
需要函数式接口的地方
流
特性
函数式数据处理
天生的并行能力
延迟绑定能力
在需要使用数据的时候,才去真正绑定数据源
流与集合的区别
集合的作用的数据的存储
流的作用是数据的计算(基于表达式的计算)
集合可以多次操作,而流只能被消费一次
流操作
中间操作(可以连接起来的操作)
filter、map、flatmap、reduce
终端操作(关闭流的操作)
归约
reduce
用途:将内容归约为一个值并返回
collect
预定义收集器Collectors
求和、分组、分区、多级分组分区、求总数、求平均值、求最大最小等等
收集器嵌套收集器实现多级分组分区
自定义收集器
五个核心方法
Supplier 定义收集器的结果容器
accumulator 将流中的元素作用于结果容器
finisher 遍历完成后,对结果容器做最后一次转换操作(也可以不做任何转换返回Function.identity)
combiner 在并行情况下存在多个结果容器,该方法定义结果容器如何合并,并最后返回一个结果容器
characteristics 收集器参数定义归约操作特性,比如是否可以并行
其他操作 count、*Match、find* 等
重点
流只能消费一次,不能重复消费
流只有碰到终端操作后才会执行流操作
状态分类
有状态
有界
无界
无状态
创建方式
集合
文件
数组
直接创建
Stream.of
Stream.empty
无限流
Stream.interate
Stream.generate
类型
对象流
普通类型流
IntStream
FloatStream
DoubleStream
接口
静态方法
static
默认方法
default
子类调用接口中的默认方法 X.super.m(),出现二义性问题时,可手动指定调用哪个父接口的方法
Optional
建立域模型的时候,声明变量使用Optional,直接表明该变量可能存在也可能不存在
如何使用Optional
建议使用map、flatmap、filter等方法,不建议使用get、isPresent等方法这些方法同样会抛出空指针异常
何时使用Optional
在领域建模的时候,明确可能为空的对象
需要定义没有值的情况时,可以返回一个空的Optional
新的日期包java.time
java8以后的时间和日期处理方式统一使用java.time的类,旧的日期和时间处理不建议继续使用
常用类:LocalDate、LocalDateTime、LocalTime、ZoneId、Duration、Period、Instant、DateTimeformatter
常用方法:parase、format、now、get、with、plus、minus
CompletableFuture
c = new CompletableFuture
绑定结果c.complete 返回主线程的结果,通过get方法获取
绑定异常c.completeExceptionally 如果抛出异常主线程获取结果的时候也会抛出异常
构建异步请求
CompletableFuture.supplyAsync()
组合多个异步请求方法
thenApply
对异步的执行结果做一次函数映射
thenCompose
将俩个异步操作组合为一个,
且第二个异步操作依赖第一个异步操作的结果,
会将第一个异步操作的结果作为参数传入给第二给异步操作,
最终返回第二个异步操作的结果
且第二个异步操作依赖第一个异步操作的结果,
会将第一个异步操作的结果作为参数传入给第二给异步操作,
最终返回第二个异步操作的结果
thenCombine
同上一个,但是俩个异步方法没有任何依赖关系
thenAccept
异步方法执行完成回调函数
并行与并发
并行/串行
并行计算
并发/顺序
并发编程
0 条评论
下一页