1、接口中默认方法修饰为普通方法
在jdk8之前,interface之中可以定义变量和方法,变量必须是public、static、final的,方法必须是public、abstract的,由于这些修饰符都是默认的。
接口定义方法: public抽象方法需要子类实现
接口定义变量: public、static、final
在JDK 1.8开始支持使用static和default修饰可以写方法体。static和default方法可以定义多个。
- 实现类可以重写default方法,不可以重写static方法
- static方法的调用必须使用[接口对象名.]调用
1.2、代码案例
2、Lambda表达式
2.1、什么是Lambda表达式
Java中使用Lambda表达式的规范,必须是为函数接口
函数接口的定义:在该接口中只能存在一个抽象方法,该接口称作为函数接口
Java中的Lambda表达式的规范,必须是为函数接口。
函数接口的定义:在该接口中只能存在一个抽象方法,该接口称作为函数接口
2.2、Lambda表达式的规范
使用Lambda表达式依赖于函数接口
- 1.在接口中只能够允许有一个抽象方法
- 2.在函数接口中定义 object类中方法
- 3.使用默认或者静态方法
- 4.@FunctionalInterface表示该接口为函数接口
3、Stream流
3.1、sorted排序
3.2、reduce并行计算
3.3、Max、Min取最大、最小
3.4、anyMatch判断集合是否含有某个元素
3.5、allMatch判断集合某个元素全部匹配
3.6、filter过滤
3.7、skip+limit实现分页
3.8、groupingBy分组
4、方法引入
方法引入需要结合 lambda表达式能够让代码变得更加精简。
- 静态方法引入 类名::(静态)方法名称
- 对象方法引入 类名::实例方法名称
- 实例方法引入 new对象 对象实例::方法引入
- 构造函数引入 类名::new
需要遵循一个规范:
方法引入方法参数列表、返回类型与函数接口参数列表与返回类型必须要保持一致。|
4.1、静态方法引入
1、定义一个函数式接口
2、工具类
3.静态方法引入
4.2、实例方法引入
1、函数式接口
2、实例方法
3、实例方法引入
4.3、构造方法引入
1、创建构造方法
2、创建函数式接口
3、构造方法引入
5、Optional
- Optional类是一个可以为null的容器对象。如果值存在则 isPresent()方法会返回true,调用get(方法会返回该对象。
- Optional 是个容器:它可以保存类型T的值,或者仅仅保存null。Optional提供很多有用的方法,这样我们就不用显式进行空值检测。
- Optional类的引入很好的解决空指针异常。
5.1、ofNullable,Of,isPresent判断参数是否为空
- ofNullable(可以传递一个空对象)
- Of(不可以传递空对象)
5.2、get()获取元素
5.3、orElse为空值设置默认值
5.4、配合filter()使用
5.5、ifPresent值不为空则执行
5.6、orElseGet
6、时间日期API
6.1、传统时间格式化存在线程安全问题
6.2、LocalDate保证时间格式化线程安全
6.2、LocalDate、LocalTime、LocalDateTime
LocalDate、 LocalTime、 LocalDateTime类的实例是不可变的对象,分别表示使用ISO-8601日历系统的日期、时间、日期和时间。它们提供了简单的日期或时间,并不包含当前的时间信息。也不包含与时区相关的信息。
lSO-8601日历系统是国际标准化组织制定的现代公民的日期和时间的表示法
6.3、Instant计算机读的时间
时间戳计算机读的时间(以Unix元年:1970年1月1日00:00:00到某个时间之间的毫秒值)
6.4、Duration计算[时间]间隔,Period计算[日期]间隔
6.5、TemporalAdjuster时间矫正器
有时我们可能需要获取例如:将日期调整到“下个周日
”等操作。
TemporalAdjusters :该类通过静态方法提供了大量的常用TemporalAdjuster的实现。
[ˈtempərəl] [əˈdʒʌstərz]
6.6、DateTimeFormatter
6.7、ZonedDate、ZonedTime、ZonedDateTime时区的处理