跳到主內容

Optional 相關

Optional是Java SE 8中的一个新特性,它提供了一种优雅的方式来处理可能为空的值,避免了空指针异常的问题。

Optional类提供了以下常用方法:

  • of():创建一个包含指定非空值的Optional对象。如果传入null,则会抛出NullPointerException异常。例如:
Optional<String> optional = Optional.of("hello");
  • empty():创建一个空的Optional对象。例如:
Optional<String> optional = Optional.empty();
  • isPresent():判断Optional对象是否包含非空值。例如:
Optional<String> optional = Optional.of("hello");
if (optional.isPresent()) {
System.out.println("value is present: " + optional.get());
}
  • get():获取Optional对象中的值,如果对象为空则抛出NoSuchElementException异常。例如:
Optional<String> optional = Optional.of("hello");
String value = optional.get();
System.out.println("value: " + value);
  • orElse():获取Optional对象中的值,如果对象为空则返回指定的默认值。例如:
Optional<String> optional = Optional.empty();
String value = optional.orElse("default");
System.out.println("value: " + value);
  • map():对Optional对象中的值进行映射操作,返回一个新的Optional对象。例如:
Optional<String> optional = Optional.of("hello");
Optional<Integer> result = optional.map(s -> s.length());
System.out.println("result: " + result.get());
  • filter():对Optional对象中的值进行过滤操作,返回一个新的Optional对象。例如:
Optional<String> optional = Optional.of("hello");
Optional<String> result = optional.filter(s -> s.startsWith("h"));
System.out.println("result: " + result.get());


需要注意的是,对Optional对象的操作通常采用链式调用的方式,如下所示:

Optional<String> optional = Optional.of("hello");
String result = optional.map(s -> s.toUpperCase())
                      .orElse("default");
System.out.println("result: " + result);
在上面的示例中,我们首先将字符串"hello"包装成Optional对象,然后使用map()方法将字符串转换成大写,最后使用orElse()方法获取处理结果,如果对象为空则返回指定的默认值"default"。