Java8 Optional 常用方法

529 阅读1分钟

一、什么是Optional

optional 是一个可以包含空或非空值的容器,用来避免空指针异常

二、创建Optional

//如果参数为空会抛出空指针异常
Optional<String> xiaoming = Optional.of("xiaoming");
//创建一个包含空的Optional对象
Optional<Object> empty = Optional.empty();
//可空的,即使参数为空,也不会抛出异常。根据参数是否是空值创建对应包含空或非空的Optional对象
Optional<Object> nullable = Optional.ofNullable(null);

三、常用方法

        //值不为空返回值
        xiaoming.get();
        //当值为空时,抛出NoSuchElementException异常
//        empty.get();
        //是存在值的,true有值,false空值
        xiaoming.isPresent();
        //是空值的,true空值。false有值
        xiaoming.isEmpty();
        //如果存在值就执行函数
        xiaoming.ifPresent(System.out::println);
        //如果存在就执行第一个函数,否则执行第二个函数
        xiaoming.ifPresentOrElse(System.out::println,()-> System.out.println("值是空的时候执行这个"));
        empty.ifPresentOrElse(System.out::println,()-> System.out.println("值是空的时候执行这个"));
        //满足过滤条件就返回自己,不满足返回包含空的optional
        Optional<String> optional = xiaoming.filter(e -> e.length() > 10);
        //当为空时返回空optional 否则返回包含映射返回值的optional
        Optional<Integer> integer = xiaoming.map(String::length);
        //Function 函数接口的方法返回一个Optional
        Optional<String> s = xiaoming.flatMap(e -> Optional.of(e.toUpperCase()));
        //如果optional不为空就返回值,否则返回参数的值
        String xiaohong = xiaoming.orElse("xiaohong");
        //不为空就返回值,否则就执行函数接口返回值
        String s1 = xiaoming.orElseGet(() -> "xiaohong");