Optional
程序员文章站
2022-03-04 11:35:41
...
转为Optinal对象 car为null也行Optional<Car> optionalCar=Optional.ofNullable(car);
//人不一定有车
public class Person {
private Optional<Car> car;
public Optional<Car> getCar() {
return car;
}
}
//车没保险也正常
public class Car {
private Optional<Insurance> insurance;
public Optional<Insurance> getInsurance() {
return insurance;
}
}
//保险一定有名字!
public class Insurance {
private String name;
public String getName() {
return name;
}
}
层层get可能为空 拿到最里面的值
public String getCarInsuranceName(Optional<Person> optionalPerson) {
//不能用map 会包2层Optional,因为getCar返回Optional<Car>
// Optional<Optional<Car>> car = optionalPerson.map(Person::getCar);
return optionalPerson
.flatMap(Person::getCar)
.flatMap(Car::getInsurance)
.map(Insurance::getName)
.orElse("Unknown");//没有值时的默认值
}
2个Optional都不null才执行xxx
Optional<Insurance> findCheapestInsurance(Optional<Person> optionalPerson,Optional<Car> optionalCar){
return optionalPerson
//如果是null不会调用
.flatMap(p->optionalCar
//如果是null不会调用
.map(c->xxx(p,c))
);
}
//2个都不是null才会执行到这
private Insurance xxx(Person p, Car c) {
//todo;
}
如果不是null,并且满足条件,才执行....
Optional<Insurance> optInsurance = Optional.ofNullable(new Insurance());
optInsurance
//存在并且满足条件,才会返回原值 不能后面就是null
.filter(insurance -> "某名字".equals(insurance.getName()))
.ifPresent(insurance->System.out.println("就是"));
string 转 Optional<Integer>
public static Optional<Integer> string2Integer(String str){
try {
return Optional.of(Integer.parseInt(str));
} catch (NumberFormatException e) {
return Optional.empty();
}
}
上一篇: Optional的用法-代码案例