IT序号网

java8之OptionalDemo知识解答

luoye 2021年05月25日 编程语言 144 0
        // null引用在历史上被引入到程序设计语言中,目的是为了表示变量值的缺失。 
        // Java 8中引入了一个新的类java.util.Optional<T>,对存在或缺失的变量值进行建模。 
        // 你可以使用静态工厂方法Optional.empty、Optional.of以及Optional.ofNullable创建Optional对象。 
        // Optional类支持多种方法,比如map、flatMap、filter,它们在概念上与Stream类中对应的方法十分相似。 
        // 使用Optional会迫使你更积极地解引用Optional对象,以应对变量值缺失的问题,最终,你能更有效地防止代码中出现不期而至的空指针异常。 
        // 使用Optional能帮助你设计更好的API,用户只需要阅读方法签名,就能了解该方法是 否接受一个Optional类型的值。 
         
        // empty         返回一个空的Optional 实例 
        // filter        如果值存在并且满足提供的谓词,就返回包含该值的Optional 对象;否则返回一个空的Optional 对象 
        // flatMap       如果值存在,就对该值执行提供的mapping 函数调用,返回一个Optional 类型的值,否则就返回一个空的Optional 对象 
        // get           如果该值存在,将该值用Optional 封装返回,否则抛出一个NoSuchElementException 异常 
        // ifPresent     如果值存在,就执行使用该值的方法调用,否则什么也不做 
        // isPresent     如果值存在就返回true,否则返回false 
        // map           如果值存在,就对该值执行提供的mapping 函数调用 
        // of            将指定值用Optional 封装之后返回,如果该值为null,则抛出一个NullPointerException异常 
        // ofNullable    将指定值用Optional 封装之后返回,如果该值为null,则返回一个空的Optional 对象 
        // orElse        如果有值则将其返回,否则返回一个默认值 
        // orElseGet     如果有值则将其返回,否则返回一个由指定的Supplier 接口生成的值 
        // orElseThrow  如果有值则将其返回,否则抛出一个由指定的Supplier 接口生成的异常 
         
        // 1、创建Optional对象 
        // 1.1、使用静态工厂方法Optional.empty,创建一个空的Optional对象 
        Optional<Integer> optInteger = Optional.empty(); 
         
        // 1.2、使用静态工厂方法Optional.of,依据一个非空值创建一个Optional对象,如果值为null会立即抛出一个NullPointerException 
        optInteger = Optional.of(11); 
         
        // 1.3、使用静态工厂方法Optional.ofNullable,你可以创建一个允许null值的Optional对象 
        optInteger = Optional.ofNullable(null); 
         
        // 2、使用map从Optional 对象中提取和转换值 
        //optInteger = Optional.of(11); 
        System.out.println(optInteger.map(Integer::intValue).orElse(1)); 
 
        Optional<Person> person = Optional.empty(); 
         
        System.out.println(person.flatMap(Person::getCar)); 
 
        person.ifPresent((p) -> { 
            System.out.println(p.getCar()); 
        });
public class Insurance { 
    private String name; 
 
    public String getName() { 
        return name; 
    } 
}
public class Car { 
    private Optional<Insurance> insurance; 
 
    public Optional<Insurance> getInsurance() { 
        return insurance; 
    } 
}
public class Person { 
    private Optional<Car> car; 
 
    public Optional<Car> getCar() { 
        return car; 
    } 
}

发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Java8之日期和时间demo知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。