java8 optional 类的运用

常用方法:
    public static <T> Optional<T> of(T value);// 为Optional设值,值为空抛异常
    public static <T> Optional<T> ofNullable(T value) ;// 为Optional设值,值为空不抛异常
    public T get();// 如果Optional中有值,则返回值,否则抛出 NoSuchElementException 
    public boolean isPresent() ; // 如果存在值,返回 true,否则返回 false 
    public void ifPresent(Consumer<? super T> consumer) ;// 如果存在值,则使用该值调用指定的消费者,否则不执行任何操作。
    public T orElse(T other) ; //如果创建的Optional中有值存在,则返回此值,否则返回一个默认值
    public T orElseGet(Supplier<? extends T> other) ; //如果Optional中有值存在,则返回此值,否则返回一个由Supplier接口生成的值

实际应用:

    @Test
    public void test1(){
        Optional<User> userOptional = Optional.of(new User("张三","123456",12));

        // 一般使用,不推荐
        if (userOptional.isPresent()) {
            System.out.println(userOptional.get());
        }
        // 推荐函数式写法
        userOptional.ifPresent(u-> System.out.println(u));



        // school 与 user 是一对多的关系,school 里面有一个user的集合
        // 若school里面的user集合不为null,输出该集合,否则输出一个空集合


        User user1 = new User("张三","123456",12);
        User user2 = new User("李四","123456",12);
        List<User> userList = Arrays.asList(user1,user2);

        School school = new School();
        school.setUserList(userList);   //此行可注释,使list为null


        //一般写法
        List<User> list = school.getUserList();
        if (list!=null) {
            System.out.println(list);
        }else{
            System.out.println(new ArrayList<User>());
        }

        // 函数式写法
        Optional<School> optionalSchool = Optional.ofNullable(school);
        System.out.println(optionalSchool.map(u -> u.getUserList()).orElse(Collections.emptyList()));

    }

猜你喜欢

转载自blog.csdn.net/eaphyy/article/details/84962950