Java8新特性:java.util.Optional类的使用

文章目录

          • Java8新特性:java.util.Optional类的使用
            • 1、创建Optional对象
            • 2、获取Optional对象中的值

Java8新特性:java.util.Optional类的使用
1、创建Optional对象
Ⅰ、empty()方法用于创建一个没有值的Optional对象
   Optional<String> emptyOpt = Optional.empty();
   备注:empty()方法创建的对象没有值,如果对emptyOpt变量调用isPresent()方法会返回false,调用get()方法抛出NullPointerException异常

Ⅱ、of()方法使用一个非空的值创建Optional对象
   String str = "Hello World";
   Optional<String> notNullOpt = Optional.of(str);

Ⅲ、ofNullable()方法接收一个可以为null的值
   Optional<String> nullableOpt = Optional.ofNullable(str);
   备注:如果str的值为null,得到的nullableOpt是一个没有值的Optional对象
2、获取Optional对象中的值
Ⅰ、map()方法接受一个映射函数参数,返回一个被Optional包装的结果,若结果为空,则返回空的Optional对象
   User user = new User("Jerome", 27);
   Optional<Optional<String>> optionalOptional = Optional.ofNullable(user).map(this::getName);
   Optional<String> mapOptional = Optional.ofNullable(user).map(s -> s.getName());

Ⅱ、flatMap()方法接受一个返回值为Optional的映射函数参数,该返回值亦是flatMap方法的返回值,若结果为空,则返回空的Optional对象
   Optional<String> flatOptional = Optional.ofNullable(user).flatMap(this::getName);
    
Ⅲ、orElse()方法如果有值就返回,否则返回一个给定的值作为默认值
   String str = "Hello World";
   Optional<String> strOpt = Optional.of(str);
   String orElseResult = strOpt.orElse("Hello Hefei");

Ⅳ、orElseGet()方法和orElse()方法类似,区别在于生成默认值的方式不同,该方法接受一个Supplier<? extends T>函数式接口参数,用于生成默认值
   String orElseGet = strOpt.orElseGet(() -> "Hello Hefei");

Ⅴ、orElseThrow()方法和get()方法类似,当值为null时调用这两个方法都会抛出NullPointerException异常,区别在于该方法可以指定抛出的异常类型
   String orElseThrow = strOpt.orElseThrow(() -> new IllegalArgumentException("Argument 'str' cannot be null or blank."));

Ⅵ、ifPresent()方法接收一个Consumer<? super T>函数式接口,一般用于将信息打印到控制台
   Optional<String> strOpt = Optional.of("Hello World");
   strOpt.ifPresent(System.out::println);

Ⅶ、filter()方法可用于判断Optional对象是否满足给定条件,一般用于条件过滤
   Optional<String> optional = Optional.of("[email protected]");
   optional = optional.filter(str -> str.contains("164"));
   备注:如果filter()方法中的Lambda表达式成立,filter()方法会返回当前Optional对象值,否则返回一个值为空的Optional对象。

你可能感兴趣的:(Java开发,java,lambda,spring,filter,spring,boot)