Lambda从入门到精通之二十六 Optional对象的map方法的使用方法

Optional的map操作也是进行类型转换的,和Labmda的stream的map()方法功能是一样的。
区别在于,如果Optional包含一个值,那函数就将该值作为参数传递给map,对该值进行转换。如果Optional为空,就什么也不做,这就是为什么前面我们说到Optional能消除空指针的原因。

看map方法的demo:

@Data
public class OptPerson {

    private String name;

    private Optional<OptCar> optCar;
	
}


@Data
public class OptCar {

    private String carName;

    private OptCarBrand optCarBrand;
}


import java.util.Optional;

public class OptMapAndFlatMap {

    public static void main(String[] args) {
        OptPerson optPerson = new OptPerson();
        optPerson.setName("IT之美");
        optPerson.setOptCar(Optional.empty());

        System.out.println(optPerson.getOptCar().map(OptCar::getCarName));
        //输出:Optional.empty

        OptCar optCar = new OptCar();
        optCar.setCarName("奔驰");
        Optional<OptCar> optCar2 = Optional.of(optCar);
        optPerson.setOptCar(optCar2);
        Optional<String> s2 = optPerson.getOptCar().map(OptCar::getCarName);
        System.out.println(s2);
        //输出:Optional[奔驰]
    }
}

其实map方法也并不复杂,方法中也是调用了Optional中的isPresent方法来判断对象是否为空,为空就直接返回空了,不为空则继续执行,看源码:

public<U> Optional<U> map(Function<? super T, ? extends U> mapper) {
	Objects.requireNonNull(mapper);
	if (!isPresent())
		return empty();
	else {
		return Optional.ofNullable(mapper.apply(value));
	}
}