JDK各版本新特性
2022-06-05 16:47:06 0 举报
AI智能生成
jdk各版本新特性
作者其他创作
大纲/内容
1、Java 8 新特性
1、lambda表达式
1、前提
1、必须有函数式接口
1、语法格式
1、无参数无返回值
() -> System.out.println("");
2、有一个参数无返回值
1、(x) -> System.out.println(x);
2、x -> System.out.println(x);
3、有两个参数并且有返回值,并且lambda体中有多条语句
(x,y) -> {xxxxx;xxxxx; return xxx}
4、有两个参数并且有返回值,并且lambda体中有一条语句,大括号和省略号都可以不用写
(x,y) -> xxxxx;
5、lambda表达式的参数列表可以不用写,因为JVM编译器通过上下文可以推断出数据类型,即类型推断
2、函数式接口
接口汇总只有一个抽象方法的接口,称为函数式接口,可以使用注解@FunctionalInterface
内置函数式接口
1、Consumer<T> 消费型接口
1、accept(T t)
2、Supplier<T> 供给型接口
1、T get()
3、Function<T,R> 函数型接口
1、R apply(T t)
4、Predicate<T> 断言型接口
1、tet(T t)
3、方法引用引用
1、概述
若果Lambda体重的内容有方法已经实现了,我们可以使用方法引用
Lambda体重调用方法的参数列表和返回值类型,要与函数式接口中抽象方法的函数列表和返回值类型保持一致
2、语法格式
1、对象::实例方法名
2、类::静态方法名
3、类::实例方法名
4、构造器引用
1、概述
Suplier<Employee> su = Employee::new; 匹配无参构造器
Function<Integer,Employee> em = Employee:new; 匹配一个参数的构造器
2、注意
需要调用的构造器参数需要与函数式接口的参数个数保持一致
5、数组引用
1、概述
Type::new
6、Stream
1、概述
定义
是数据渠道,用于操作数据源(集合,数组等)锁生成的元素序列。集合讲的是数据,流讲的是计算
注意
Stream 自己不会存储元素
Stream不会改变源对象,相反,他们会返回一个持有结果的新的Stream
Stream操作是延迟执行的,这移位着他们会等到需要结果的时候才执行
2、操作步骤
1、创建Stream
1、通过Collection系列结合提供的stream() 串行流或parallelStream()并行流
2、通过Arrays中 的静态方法stream() 获取数组流
3、通过Stream类中的静态方法of()
4、创建无限流
1、迭代
2、生成
2、中间操作
1、筛选和切片
1、filter
接收Lambda,从流中排除某些元素
2、limit
截断流,使其元素不超过给定数量
3、skip(n)
跳过元素,返回一个扔掉了前n个元素的流,若流中元素不足n个,则返回一个空流,与limit(n)互补
4、distinct
筛选,公国流锁生成元素的hasCode 和 equals去除重复元素
2、映射
1、概述
map--接收Lambda,将原始转化成其他形式或提取信息,接收一个函数作为参数,将元素转化成其他形式或提取信息,接收一个函数作为参数,该函数会被应用到每个元素上,并将其映射成一个新的元素,
flatMap 接收一个函数作为参数,将流中的每个值都转换成一个流,然后把所有流连接成一个流
map 将对象转换为其他对象
List的场合可以 类比创建一个新的List并执行List add 和 addAll
3、排序
1、sorted() 自然排序 Comparable
Comparable指定的顺序
2、sorted(Comparator com) 定制排序
4、查找与匹配 filter
1、allMatch 检查是否匹配所有元素
2、anyMatch 检查是否至少匹配一个元素
3、noneMatch 检查是否没有匹配所有元素
4、findFirst 返回第一个元素
5、findAny 返回当前流中的任意元素
6、count 返回流中元素的总个数
7、max 返回流中的最大值
8、min返回流中最小值
3、终止操作
5、规约 reduce 可以将流中元素反复结合起来,得到一个值
6、搜集 collect
搜集所有人的名字
7、并行流和串行流 Fork/Join
1、工作窃取模式
当执行新的任务时,他可以拆分成更小的任务执行,并将小的任务加到线程中,然后再送一个随机的线程队列偷一个放到自己的队列中java8中Stream API可以申明性通过parallel()与sequential()在并行流与顺序流之间切换
2、效率比较高可以更好的利用cpu资源
8、Option容器类
1、Optional.of 创建一个 Optional 实例
2、Optional.empty() 创建一个空的 Optional 实例
3、Optional.ofNullable(T t) 若 t 不为 null,创建 Optional 实例,否则创建空实例
4、isPresent() : 判断是否包含值
5、orElse(T t) : 如果调用对象包含值,返回该值,否则返回t
6、orElseGet(Supplier s) :如果调用对象包含值,返回该值,否则返回 s 获取的值
7、map(Function f): 如果有值对其处理,并返回处理后的Optional,否则返回 Optional.empty()
8、flatMap(Function mapper):与 map 类似,Function要求返回值必须是Optional
9、接口默认方法
1、接口中可以用default中定义默认方法
2、类优先原则-如果一个接口中定义了一个方法,而另一个父类中也定义了同名方法,则执行类中的方法
3、接口多实现中都有同名的默认方法,则接口必须重写改方法
10、接口静态方法 与普通静态方法一致
11、时间函数
1、传统时间函数
1、问题
1、线程安全问题
2、新的api
1、DateTimeFormatter
2、LocalDate
3、LocalTime
4、LocalDateTime
1、now 现在
1、of 通过参数年月日,构建时间
5、Instance 已Unix元年为起点时间戳
1、now() 默认获取utc时间 格林尼治时间 本地时差 8小时
2、atOffset(ZoneOffset.xxxx) 带偏移量的时间
3、toEpochMilli
6、Duration 两个时间之间的间隔
7、Period 两个日期之间的间隔
8、ZoneDate
9、ZoneTime
10、ZoneDateTime
1、ZoneId.of("xx/shanghai")
12、重复注解
1、必须先创建容器
2、添加RepeatAble注解
0 条评论
下一页