1、lambda表达式
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、注意
需要调用的构造器参数需要与函数式接口的参数个数保持一致
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、接口多实现中都有同名的默认方法,则接口必须重写改方法