一、Java8
1.Lambda表达式
Lambda是一个匿名函数,类似一段可以传递的代码,简洁灵活
- “->”称为Lambda操作符或箭头操作符:
- 左侧:指定Lambda表达式需要的参数
- 右侧:指定Lambda体,是抽象方法的实现逻辑,即要实现的具体功能
语法格式
1.无参无返回值:()->{System.out.print(“lala”);}; 2.一个参数,无返回值:(String str)->{System.out.priont();}; 3.数据类型可省略(编译器推断得出),类型推断:(str)->{System.out.print();}; 4.一个参数时,括号可以省略:str->{System.out.print();}; 5.多个参数,多条语句,可以有返回值:(x,y)->{System…;return Integer.compare(x,y);}; 6.Lambda体只有一条语句,return与大括号可省略:(x,y)->Integer(x,y);
类型推断 Lambda表达式无需指定类型,因为javac根据程序上下文,在后台推断出了参数类型。(由编译器推断)
2.函数式(Functional)接口
只包含一个抽象方法的接口 需要在一个接口上使用@FunctionalInterface注解,可以检查是否函数式接口,且Javadoc也会声明是一个函数式接口 Lambda表达式是对象,不是函数,需要依附特别的对象–函数式接口
以前匿名实现类现在都可以用Lambda表达式书写
3.方法引用与构造器引用
使用“::”将类与方法名分隔开 对象::实例方法名 类::静态方法名 类::实例方法名
Comparator<Integer> com = (x,y)->Integer.compare(x,y);
||
Comparator<Integer> com2 = Integer::compare;
Function fun = (n)->new MyClass(n);
||
Function fun2 = MyClass::new;
function fun = (n)->new Integer[n];
||
function fun2 = Integer[]::new
4.强大的Stream API
Collection是静态的内存数据,Stream是有关计算的。 Stream是数据渠道,用于操作数据源所生成的元素序列 特点
- Stream自己不会存储元素
- 不会改变源对象
- 是延迟操作,意为他们等到需要结果时候才执行
步骤 创建Stream,中间操作,终止操作
创建流 1.Collection获取:
- stream():返回顺序流
- parallelStream():返回并行流
2.数组获取: stream(T[] array):返回一个流 3.通过Stream的of方法 4.创建无限流Stream.iterate和Stream.generate()
方法 中间:筛选切片、映射、排序 终止操作:匹配查找、归约、收集
1.生成Stream流的三种方式
3.Stream流中间操作方法
| 说明 |
---|
filter | 对数据进行过滤 | limit | 截取前指定参数个数据,返回流 | skip | 跳过指定参数个数返回流 | concat | 合并a和b两个流为一个流 | distinct | 返回不同流组成的流 | sorted | 自然顺序排列 | sorted(Comparator comparator) | 根据提供的Comparator进行排序 | map | 返回流 | mapToInt | 返回一个IntStream元素流 |
4.Stream流终结操作方法
执行完此方法,Stream流不再执行其他操作
方法 | 说明 |
---|
forEach | 对流的每个元素执行操作 | count | 返回此流的元素个数 |
5.Stream流的收集操作
方法 | 说明 |
---|
collect | 把结果收集到集合中 | static Collector toList() | 把元素收集到List集合中 | static Collector toSet() | 把元素收集到Set集合 | static Collector toMap(keyMapper,valueMapper) | 把元素收集到Map集合 |
5.Optional类
这是一个容器类,可以保存类型T的值,T可以使任意的,包括null。
二、Java9
模块化系统Jigsaw
- exports:控制着哪些包可以被其他模块访问到。所有不被导出的包默认封装在模块里面(在需要被用的src下module-info.java)
- requires:指明对其他模块的依赖(在使用的模块src下module-info.java声明)
jShell命令
接口私有方法
三、Java10
局部变量类型推断 集合新增创建不可变集合的方法 of、copyOf
四、Java11
ZGC:并发、压缩型的垃圾收集器 新增字符串处理 Optiona增强 HTTP客户端API …
由于JDK免费版本停留在JDK8,所以后面的作以了解,重点谈下JDK8.0新特性!
|