jdk8新特性学习,视频来自2021最新版JDK8新特性详解
一、Lambda表达式
lambda表达式的优点:
1、简化匿名内部类的使用
lambda表达式:匿名内部类是传入接口,而且该接口只能有一个抽象方法
一个方法传入接口,就是匿名内部类的写法,因为必须实现接口的抽象方法,否则会报错
2、lambda表达式的省略写法
3、lambda表达式的使用前提
4、lambda表达式和匿名内部类的对比
Lambda表达式使用时不关心接口名,抽象方法名。只关心抽象方法的参数列表和返回值类型
二、接口新特性
1、默认方法 default void test()
接口中的抽象方法一定要重写,如果有默认方法存在。多个实现了接口的类,可以不重写默认方法
2、静态方法
直接通过接口类名调用
3、两者的区别介绍
三、函数式接口
1、函数式接口的由来
lambda表达式只关心入参和返回值类型,重写接口中的方法,lambda表达式相当于一个实现类
2、函数式接口介绍
String.valueOf 将其他类型转为String
Double.valueOf 将字符串转为Double
Arrays.sort() 对数组进行排序
jdk提供了以上四种函数式接口,我们就不用自己再去写接口了
四、方法引用
对象名::方法名
类名::静态方法名
类名::方法名
类名::构造器
数组::构造器
五、Stream API
定义一个List集合 Arrays.asList() 主要针对集合的操作进行优化
常用API
集合数据处理举例:
Stream对数据进行加工处理,filter、map、skip、count
stream要调用终结方法才有作用
** 4.3 filter**
4.5 skip
4.7 sorted
o2 - o1 代表降序 sorted默认是升序
-> 叫做箭头
4.13 map与reduce的结合
stream对包装类进行操作i,比如Integer
Integer.intValue 把String转为int
4.14 mapToInt
4.16 综合案例
1 | package com.bobo.jdk.stream; |
想要test测试,可以引入 junit 依赖
Stream结果收集
聚合运算:
1 | / |
数组分组:
并行的Stream流
之前的Stream操作都是串行流,它们都是在一个线程中去操作,因此效率不是很高
获取并行流的两种方式:
并行流就是转换成多线程处理
并行流中的线程安全问题
六、Optional类
解决空指针问题
Optional常用方法
七、新日期时间API
sdf.format 将时间转为字符串
sdf.parse 将字符串转为时间
想要不打印错误日志,可以 try catch 打印一下,可以把错误信息提示去除
新的API位于java.time包下
新日期API介绍
日期时间类型:
LocalDate、LocalTime、LocalDateTime的操作
日期时间的修改和比较
变量后加soutv,可以快速打印,并且是v = 的形式
新日期API在多线程场景下是日期安全的,因为他创建了一个新对象,不是在原对象基础上修改的
日期格式化
使用方法引用打印更加的简洁