Java8中Optional类
程序员文章站
2022-06-07 12:30:38
...
package com.optional;
import java.util.Optional;
public class OptionalDemo {
/**
Optional容器类(JDK1.8)
用处:在开发中想把上一个对象的返回值最为下一个对象的参数,但不确定上一个对象的返回值是否为空的情况下,可以把
上一个对象的返回值创建一个Optional对象
这是一个可以为Null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
方法介绍:
of:
为非null的值创建一个Optional
ofNullable:
为指定的值创建一个Optional,如果指定的值为null,则返回一个空的Optional
isPresent:
如果值存在返回true,否则返回false
get:
如果Optional有值则将其返回,否则抛出NoSuchElementException
ifPresent:
如果Optional实例有值则为其调用consumer,否则不做处理
orElse:
如果有值则将其返回,否则返回指定的其它值
orElseGet:
orElseGet与orElse方法类似,去别在于得到的默认值。orElse方法将传入的字符串作为默认值,orElseGet方法可以接受
Supplier接口的实现用来生成默认值
orElseThrow:
如果有值则将其返回,否则抛出Supplier接口创建的异常
map:
如果有值,则对其执行调用mapping函数得到返回值。如果返回值不为null,则创建包含mapping返回值的Optional作为map
方法返回值,否则返回空Optional
flatmap:
如果有值,为其执行mapping函数返回Optional类型返回值,否则返回空Optional。flatMap与map(Function)方法类似,区别
在于flatMap中的mapper返回值必须是Optional。调用结束时,faltMap不会对结果用Optional封装。
filter:
如果有值并且满足断言条件返回包含该值的Optional,否则返回空Optional。
*/
public static void main(String[] args) {
//创建Optional对象的方式:
Optional<String> optional = Optional.of("bin");
Optional<String> optional2 = Optional.ofNullable("bin");
Optional<String> optional3 = Optional.empty();
//isPresent
System.out.println(optional.isPresent());
//get
System.out.println(optional2.get());
//ifPresent
optional.ifPresent((value)->System.out.println(value));
//orElse
System.out.println(optional3.orElse("无值"));
//orElseGet
System.out.println(optional3.orElseGet(()->"default"));
//orElseThrow
try {
optional3.orElseThrow(Exception::new);
} catch (Exception e) {
e.printStackTrace();
}
//map方法会自动创建一个Optional对象
Optional<String> optional4=optional3.map((value)->value.toUpperCase());
System.out.println(optional4.orElse("no such value"));
//flatMap不会自己创建,所以需要手动创建封装
Optional<String> optional5= optional.flatMap((value)->Optional.of(value.toUpperCase()+"-flatMap"));
System.out.println(optional5.orElse("no found"));
//filter
Optional<String> optional6=optional.filter((value)->value.length()>4);
System.out.println(optional6.orElse("该值长度小于4"));
}
}
上一篇: 最火的火锅种类有哪些?这些火锅太受欢迎啦