JDK8 Optional

1. Optional

Optional 是 Java8 新引入的类这是一个可以为 null 的容器对象,作为新特性,配合使用函数式风格编程!其主要作用是解决对象空指针的问题!

2. Optional 用法

2.1 创建一个 Optional

Optional<String> name1 = Optional.empty();
Optional<String> name2 = Optional.of("coffee");
Optional<String> name3 = Optional.ofNullable(null);
 

empty 创建一个空的 Optional 对象

of 创建一个 Optional 对象,传入的参数不能为 null,否则 NullPointerException

ofNullable 创建一个 Optional 对象,传入的参数可以为 null

 

2.2 isPresent、ifPresent 

isPresent 判断容器内对象是否为 null,范围一个 boolean

ifPresnet 如果容器内对象不为 null,执行参数中的接口段或lambda表达式

 

Optional<String> name = Optional.of("coffee");

if(name.isPresent())
        System.out.println(name.get());

name.ifPresent(x -> System.out.println(x));

 

2.3 get、orElse、orElseGet、orElseThrow

这四个方法都是用来返回容器中的值,只是在容器中值为 null 的时候,有不同的处理逻辑

get 如果为 null,NullPointerException

orElse 如果为 null,返回传入参数作为默认值

orElseGet 如果为 null,用传入参数 Supplier 接口的实现来生成默认值

 

orElseThrow 如果为 null,返回特定的异常对象

 

Optional<String> name = Optional.ofNullable(null);

System.out.println(name.get());
System.out.println(name.orElse("coffee_orElse"));
System.out.println(name.orElseGet(() -> "coffee_orElseGet"));
System.out.println(name.orElseThrow(RuntimeException::new));

 

2.4 filter、map、flatMap

map 方法用来对 Optional 实例的值执行一系列操作,通过 lambad 表达式定义操作

flatMap 和 map 非常类似,不同的是返回类型必须是 Optional,map 会在内部实现包装 Optional

filter 对 Optional 实例的值进行过滤

 

Optional<String> name = Optional.ofNullable("coffee");

System.out.println(name.map(x -> x.toUpperCase()).orElse("No value found"));
System.out.println(name.flatMap(x -> Optional.ofNullable(x.toUpperCase())).orElse("No value found"));
System.out.println(name.filter(x -> x.equals("kafei")).orElse("No value found"));

 

猜你喜欢

转载自kafeiwu.iteye.com/blog/2303743