前端开发入门到精通的在线学习网站

网站首页 > 资源文章 正文

Optional使用(optional用法)

qiguaw 2024-10-28 17:29:25 资源文章 21 ℃ 0 评论

Optional<T>类为java8首次引入,作为一个容器对象,用来处理空值判断逻辑,容器value可能包含也可能不包含非空值。

Optional类主要方法

public boolean isPresent()
public static<T> Optional<T> empty()
public void ifPresent(Consumer<? super T> consumer)
public static <T> Optional<T> of(T value)
public static <T> Optional<T> ofNullable(T value)
public T get()
public T orElse(T other)
public T orElseGet(Supplier<? extends T> other)
public <X extends Throwable> T orElseThrow(Supplier<? extends X> exceptionSupplier) 

对象的判断

先定义一个User对象类,下面举例来说明对对象及其属性的连续判断null值的用法。

public class User {
    private String name;
    public User(String name) {
        this.name = name;
    }
    public User() { }

    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}

对于返回指定User对象的用户名称的长度,常规代码如下:

public int getNameLength(User user) {
   int len = 0;
   if (user != null) {
      String name = user.getName();
      if (name != null) {
          len = name.length();
      }
   }
   return len;
}

如果使用Optional类,编写的代码简单很多。

int len = Optional.ofNullable(user).map(User::getName)
  .map(String::length).orElse(0);


列表对象的空值判断

List<User> nullList = null;
List<User> list = Optional.ofNullable(nullList).orElse(Collections.emptyList());

判断完null值后就能进行stream操作

List<Integer> ret = Optional.ofNullable(list).orElse(Collections.emptyList())
  .stream().filter(e -> e != null && e.getName() != null)
  .map(e -> e.getName())
  .map(e -> e.length())
  .collect(Collectors.toList());


注意

Optional的get()方法谨慎使用,查看源码可知当容器值为null时会抛出异常。建议使用orElse()方法替代。

public T get() {
   if (value == null) {
       throw new NoSuchElementException("No value present");
   }
   return value;
}

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表