jdk8新特性
lambda表达式
-
简介:lambda允许把函数作为一个方法的参数,一个lambda表达式包含用逗号分隔的参数列表、->符号、函数体三个部分。
(String s)->System.out.println(value); s就是参数 System.out.println(value)就是函数体
-
说明:lambda表达式其实完成了实现接口并且实现接口里的方法,也可以认为lambda表达式代表一种动作,我们可以直接把
这种特殊的动作进行传递。如果一个lambda表达式实现了接口里有且仅有的唯一抽象方法,那么对于这种接口就叫做函数式接口。
函数式接口
-
简介:在java中 使用@FunctionalInterface修饰的接口就叫函数式接口,或者可以说函数式接口是一个只有一个抽象方法的
的普通接口,@FunctionalInterface可以起到校验的作用。例如 @FunctionalInterface public interface TestFunction { void test(); void test1(); } 这时编译器,会提示编译错误。 因为这不符合函数式接口的特征。这就是校验的作用。
-
jdk中的函数式接口
接口 | 描述 |
---|---|
Supplier | 无参数,返回一个接口 |
Function | 接受一个输入参数,返回一个结果 |
Consumer | 接受一个输入参数,无返回结果 |
Predicate | 接受一个输入参数,返回一个布尔值结果 |
备注(如果前面加Bi表示接受2个参数,返回结果相同)
实例
() -> {return 0;},没有传入参数,有返回值
(int i) -> {return 0;},传入一个参数,有返回值
(int i) -> {System.out.println(i)},传入一个int类型的参数,但是没有返回值
(int i, int j) -> {System.out.println(i)},传入两个int类型的参数,但是没有返回
- 接口的默认方法和静态方法
- 默认方法:在接口中用default修饰的方法称为默认方法 默认方法。 接口中的默认方法一定要有默认实现(方法体),接口实现者可以继承它,也可以覆盖它。
- 静态方法:在接口中用static修饰的方法称为静态方法 静态方法。
Optional
-
简介:optional主要用来解决空指针异常
-
api
创建Optional对象的几个方法: 1. Optional.of(T value), 返回一个Optional对象,value不能为空,否则会出空指针异常 2. Optional.ofNullable(T value), 返回一个Optional对象,value可以为空 3. Optional.empty(),代表空 其他API: 1. optional.isPresent(),是否存在值(不为空) 2. optional.ifPresent(Consumer<? super T> consumer), 如果存在值则执行consumer 3. optional.get(),获取value 4. optional.orElse(T other),如果没值则返回other 5. optional.orElseGet(Supplier<? extends T> other),如果没值则执行other并返回 6. optional.orElseThrow(Supplier<? extends X> exceptionSupplier),如果没值则执行exceptionSupplier, 并抛出异常 高级API: 1. optional.map(Function<? super T, ? extends U> mapper),映射,映射规则由function指定,返回映射值 的Optional,所以可以继续使用Optional的API。 2. optional.flatMap(Function<? super T, Optional< U > > mapper),同map类似,区别在于map中获取的返 回值自动被Optional包装,flatMap中返回值保持不变,但入参必须是Optional类型。 3. optional.filter(Predicate<? super T> predicate),过滤,按predicate指定的规则进行过滤,不符合规则则 返回empty,也可以继续使用Optional的API。