Java8-Optional简单用法
程序员文章站
2022-06-07 19:51:44
...
Optional:
这是一个可以为null的容器对象。如果值存在则isPresent()方法会返回true,调用get()方法会返回该对象。
public class OptionalTest {
private String name;
private int age;
private boolean sex;
public OptionalTest(String name, int age, boolean sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public static void main(String[] args) {
OptionalTest optionalTest = new OptionalTest("lihua", 23, true);
OptionalTest optionalTesting = null;
//of 把指定的值封装为Optional对象,如果指定的值为null,则抛出NullPointerException
Optional<OptionalTest> optionalTest1 = Optional.of(optionalTest);
System.out.println(optionalTest1.get());
//empty 创建一个空的Optional对象
Optional<Object> empty = Optional.empty();
System.out.println(empty);
//ofNullable 把指定的值封装为Optional对象,如果指定的值为null,则创建一个空的Optional
对象
Optional<Object> o = Optional.ofNullable(null);
/*System.out.println(o.get());*/
//orElse 如果创建的Optional中有值存在,则返回此值,否则返回一个默认值
Object o1 = o.orElse(optionalTest);
System.out.println(o1);
//orElseGet 如果创建的Optional中有值存在,则返回此值,否则返回一个由Supplier接口生成的
值
Object orElseGet = o.orElseGet(() -> new OptionalTest("lisi", 25, true));
System.out.println(orElseGet);
//filter 如果创建的Optional中的值满足filter中的条件,则返回包含该值的Optional对象,否
则返回一个空的Optional对象
Optional<OptionalTest> filter = optionalTest1.filter(x -> x.sex == true);
System.out.println(filter.get());
//map 如果创建的Optional中的值存在,对该值执行提供的Function函数调用
String map = optionalTest1.map(x -> x.name.toUpperCase()).orElse("失败了");
System.out.println(map);
//flagMap 如果创建的Optional中的值存在,就对该值执行提供的Function函数调用,返回一个
Optional类型的值,否则就返回一个空的Optional对象
Optional<Object> o2 = Optional.ofNullable(optionalTesting).flatMap(e ->
Optional.empty());
System.out.println("flatMap..."+o2.isPresent());
//ifPresent 如果创建的Optional中的值存在,则执行该方法的调用,否则什么也不做
optionalTest1.ifPresent(x-> System.out.println("ifPresent..." + x));
}
@Override
public String toString() {
return "OptionalTest{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}';
}
}
OptionalTest{name='lihua', age=23, sex=true}
OptionalTest{name='lihua', age=23, sex=true}
OptionalTest{name='lisi', age=25, sex=true}
OptionalTest{name='lihua', age=23, sex=true}
LIHUA
flatMap...false
ifPresent...OptionalTest{name='lihua', age=23, sex=true}