zoukankan      html  css  js  c++  java
  • java8之OptionalDemo

            // 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;
        }
    }
  • 相关阅读:
    中国正在消失的老行当
    ie9 scrollbar中hover 高度增高的bug
    (替月光博客备份)百度百科:游荡在中国的窃贼
    严格模式下 W3C Strict 验证的几个注意事项
    [转]滤镜渐变使用 IE浏览器
    1.什么是串口?
    6.串口操作之API篇 GetCommTimeouts SetCommTimeouts
    5.串口操作之API篇 SetupComm GetCommState SetCommState
    TeeChart经验总结 13.Export之2.对象保存
    解决"手机存储暂不能使用""SIM卡存储暂不能使用"
  • 原文地址:https://www.cnblogs.com/miaosj/p/12286830.html
Copyright © 2011-2022 走看看