Optional容器类(JDK1.8)
Optional容器类(JDK1.8)
这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
作用 为啥用它 ? 好像是收到返回值不用判断是否为空了 直接使用就可以了 (以后理解了再完善)
创建Optional对象的两种方式
of:
为非null的值创建一个Optional。
ofNullable:
为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional。
这个比of更加严谨一些
还有一个创建一个空的Optional对象
isPresent:
如果值存在返回true,否则返回false。
get:
如果Optional有值则将其返回,否则抛出NoSuchElementException。
ifPresent:
如果Optional实例有值则为其调用consumer,否则不做处理 相当于判断吧
下面这句话写的consumer操作是如果有值就打印出来
ifPresent 里面传的是一个Consumer接口 它有一个参数
orElse:
如果有值则将其返回,否则返回指定的其它值。
orElseGet:
orElseGet与orElse方法类似,区别在于得到的默认值。
orElse方法将传入的字符串作为默认值,orElseGet方法可以接受Supplier接口的实现用来生成默认值。
OrElseGet方法里面传的是一个Supplier接口 里面是一个test方法 test方法里面没有参数
orElseThrow:
如果有值则将其返回,否则抛出supplier接口创建的异常。
map:
如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map方法返回值,否则返回空Optional。
map 里面传的是一个Function 它有一个参数
flatMap:
如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Funtion)方法类似,区别在于flatMap中的mapper返回值必须是Optional。调用结束时,flatMap不会对结果用Optional封装。
flatMap里面是一个Mapping 它里面还是一个Function 一个参数
filter:
如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。
Predicate里面有一个参数
package com.vince;
import java.util.Optional;
/**
* Optional JDK1.8容器类
* @author vince
* @description
*/
public class OptionalDemo {
public static void main(String[] args) {
//创建Optional对象的方式
Optional<String> optional = Optional.of("bin");
// Optional<String> optional2 = Optional.ofNullable("bin");
Optional<String> optional3 = Optional.empty();
System.out.println(optional.isPresent());
System.out.println(optional.get());
optional.ifPresent((value)->System.out.println(value));
System.out.println(optional.orElse("无值"));
System.out.println(optional.orElseGet(()->"default"));
// try {
// optional3.orElseThrow(Exception::new);
// } catch (Exception e) {
// e.printStackTrace();
// }
Optional<String> optional4 = optional.map((value)->value.toUpperCase());
System.out.println(optional4.orElse("no found"));
optional4 = optional.flatMap((value)->Optional.of(value.toUpperCase()+"-flatMap"));
System.out.println(optional4.orElse("no found"));
optional4 = optional.filter((value)->value.length()>3);
System.out.println(optional4.orElse("这个值的长度小于3"));
}
}