目录:
动态代理:
代理模式:
静态代理举例:
动态代理举例(P664):
动态代理和AOP
java8新特性
Lambda
小案例:
语法:
函数式接口:
小案例:
方法引用和构造器引用(: :)
方法引用情况1:
方法引用情况2:
方法引用情况3:
构造器引用(举例居多):
数组引用:
Stream API:
Stream中间操作
筛选和切片:
映射:
排序
终止操作
匹配和查找
归约:
收集:
Optional类
小案例:
动态代理:
代理模式:
静态代理举例:
动态代理举例(P664):
动态代理和AOP
java8新特性
Lambda
小案例:
只能用于接口,并且这个接口只有一个抽象方法
语法:
java中Lambda表达式的本质:作为接口的一个实例
函数式接口:
如果一个接口中,只有一个抽象方法,这个就是一个函数式接口:
这个注解就是声明这是一个函数式接口
在java.util.function包下定义了java8的丰富的函数式接口
消费型:有入无出
供给型:有出无入
函数型:输入一个输出一个,输出类型可以不一样
断定型:就是判断
小案例:
方法引用和构造器引用(: :)
接口本身需要有一个方法的实现,然后在实现这个方法的过程中,饿哦们使用了另一个方法来实现,并且这两个方法(要实现的方法,实现方法中调用的另一个方法)的参数相同,就可以使用方法引用,如下小栗子:
方法引用情况1:
小案例2:
我们可以明确在Supplier中只有一个get方法需要实现,且这个方法是一个空参方法,然后为了实现这个get方法,我们需要使用getName方法来实现get方法,且这个getName方法本身也是空参的,所以我觉得这个语法就是指明使用的对象::这个对象方法
方法引用情况2:
方法引用情况3:
构造器引用(举例居多):
数组引用:
Stream API:
顺序流就是按照顺序进入,并行流就不一定了
Stream中间操作
筛选和切片:
这个就有点像数据库操作,注意这些都是中间操作,还需要最后的操作
映射:
首先理解一下这个,使用add加上list2之后,整个数组有4个元素,
使用addAll之后就会有6个元素
flatMap就和addAll的效果类似,就是把字符串中的集合转换成Stream中的实例
排序
终止操作
匹配和查找
归约:
收集:
Optional类
为了在程序中避免空指针异常而创建的。
这个get操作需要确定我们所得到的一定是一个非空数值。
小案例: