Optional类是Java8的新特性,可以用来更优雅的判空,处理null的问题。
- Optional类构造方法是私有的,不能通过new创建对象,不过提供了三个方法创建对象。
-
empty()
,创建一个空的Optional对象
Optional<String> empty = Optional.empty();
-
of()
,把指定的值封装为Optional对象,不能为null
Optional<String> o = Optional.of("str");
//传入null,会抛出NullPointerException
//Optional<String> o = Optional.of(null);
-
ofNullable()
,把指定的值封装为Optional对象,可以为null
Optional<Object> o1 = Optional.ofNullable(null);
- 常用方法
-
get()
,返回Optional对象封装的值,空的Optional对象会抛出NoSuchElementException
Optional<String> o = Optional.of("str");
//s为"str"
String s = o.get();
-
isPresent()
,如果创建的Optional中的值存在,返回true,否则返回false
Optional<String> empty = Optional.empty();
Optional<String> o = Optional.of("str");
Optional<Object> o1 = Optional.ofNullable(null);
//true
boolean present0 = o.isPresent();
//false
boolean present = o1.isPresent();
//false
boolean present1 = empty.isPresent();
-
map()
,如果创建的Optional中的值存在,对该值执行提供的Function函数调用
Optional<String> empty = Optional.empty();
Optional<String> o = Optional.of("str");
Optional<Integer> integer = o.map(v -> v.length());
Optional<Integer> integer1 = empty.map(v -> v.length());
//true
boolean present2 = integer.isPresent();
//false
boolean present3 = integer1.isPresent();
-
orElse()
,如果创建的Optional中有值存在,则返回此值,否则返回一个默认值
Optional<String> empty = Optional.empty();
Optional<String> o = Optional.of("str");
//oElse为"str",还是原来的值
String oElse = o.orElse("oElse");
//anElse 为"emptyElse"
String anElse = empty.orElse("emptyElse");
其他方法
方法 | 描述 |
---|---|
empty | 创建一个空的Optional对象 |
of | 把指定的值封装为Optional对象,如果指定的值为null,则抛出NullPointerException |
ofNullable | 把指定的值封装为Optional对象,如果指定的值为null,则创建一个空的Optional对象 |
get | 如果创建的Optional中有值存在,则返回此值,否则抛出NoSuchElementException |
isPresent | 如果创建的Optional中的值存在,返回true,否则返回false |
ifPresent | 如果创建的Optional中的值存在,则执行该方法的调用,否则什么也不做 |
map | 如果创建的Optional中的值存在,对该值执行提供的Function函数调用 |
flagMap | 如果创建的Optional中的值存在,就对该值执行提供的Function函数调用,返回一个Optional类型的值,否则就返回一个空的Optional对象 |
orElse | 如果创建的Optional中有值存在,则返回此值,否则返回一个默认值 |
orElseGet | 如果创建的Optional中有值存在,则返回此值,否则返回一个由Supplier接口生成的值 |
orElseThrow | 如果创建的Optional中有值存在,则返回此值,否则抛出一个由指定的Supplier接口生成的异常 |
filter | 如果创建的Optional中的值满足filter中的条件,则返回包含该值的Optional对象,否则返回一个空的Optional对象 |