欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Jdk1.8新特性-optional

程序员文章站 2022-06-04 21:59:31
...

传统的写代码方式经常会遇到NullPointerException,这就需要我们在代码中经常判空。而判空的写法又会显得很累赘,这里就可以用到Optional来让我们的代码更加优雅。

Optional是在java.util包下的一个用于代替null的一个工具类。

Optional的构造方法

  • Optional.of(T value):              value需要非 null,null会抛异常;
  • Optional.ofNullable(T value): value为null的话返回-Optional.empty();
  • Optional.empty():                用来构造一个空的 Optional;

Optional的相关方法介绍

  • isPresent(): 持有非空值,返回true;否则false;

  • ifPresent(): 如果 Optional 中有值,则对该值调用consumer.accept,否则什么也不做。

  • orElse: 参数是一个值,如果 Optional 中有值则将其返回,否则返回 orElse 方法传入的参数。

  • orElseGet: 传入的参数为一个 Supplier 接口的实现。

  • orElseThrow: 没有值的时候会抛出异常,抛出的异常由传入的 exceptionSupplier 提供。

  • map: 为空返回 Optional.empty;否则返回一个新的 Optional:函数 mapper 在以 value 作为输入时的输出值;可以多次使用map操作。

Optional<String> username = Optional.ofNullable(getUserById(id))
		.map(user -> user.getUsername())
		.map(name -> name.replace('_', ' '));
			
System.out.println("Username is: " + username.orElse("Unknown"));
  • flatMap: map 方法参数中的函数 mapper 输出的是值,然后 map 方法会使用 Optional.ofNullable 将其包装为 Optional;而 flatMap 要求参数中的函数 mapper 输出的就是 Optional。
Optional<String> username = Optional.ofNullable(getUserById(id))
		.flatMap(user -> Optional.of(user.getUsername()))
		.flatMap(name -> Optional.of(name.toLowerCase()));
		
System.out.println("Username is: " + username.orElse("Unknown"));
  • filter: 接受一个 Predicate 来对 Optional 中包含的值进行过滤,如果包含的值满足条件,那么还是返回这个 Optional;否则返回 Optional.empty。
相关标签: Java