一、创建对象
Optional<aaa> aaa1 = Optional.ofNullable(aaa);
aaa1.ifPresent(str -> System.out.println(aaa) );
如果使用 Optional.of()方法,必须保证这个参数不为空,不然还是会报空指针异常。
Optional.empty(); 创建一个空对象。
Optional<Object> empty = Optional.empty();
二、获取值
optional.get(); 获取封装对下个,但是不推荐,如果为空也会报空指针异常。
AAA aaa = new AAA();
Optional<AAA> optional = Optional.ofNullable(aaa);
AAA aaa1 = optional.get();
optional.orElseGet();如果数据不为空就返回封装的数据,如果为空根据你传入的参数来创建对象作为默认值返回。
AAA aaa2 = optional.orElseGet(() -> new AAA());
optional.orElseThrow();如果数据不为空就获取该数据,如果为空则根据你传入的参数来创建异常抛出
try{
AAA aaa3 = optional.orElseThrow(() -> new RuntimeException("数据为空"));
}catch (Exception e){
e.printStackTrace();
}
三、过滤
filter()方法对数据进行过滤,如果原本有数据但是不符合判断,也会变成一个无数据的Optional对象,可以直接加判断做操作。
Optional<AAA> aaa3 = optional.filter(str -> str.getAge() > 18);
optional.filter(str -> str.getAge() > 18).ifPresent( str -> System.out.println(str) );
四、判断
可以使用isPresent()方法进行是否存在数据判断,如果为空返回值为false,如果不为空返回true。但是这种方式并不能体现Optional的好处,更推荐使用ifPresent方法。
Optional<AAA> optional = Optional.ofNullable(aaa);
if(optional.isPresent()){
System.out.println(optional.get().getAge());
}
五、数据转换
Optional提供了map可以让我们对数据进行转换,并且转换得到的数据也还是被Optional包装好的,保证了我们的使用。
Optional<List<String>> strings = optional.map(str -> str.getList());