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"。
optional.isPresent()
方法用于检查Optional
对象是否包含非空值,如果对象中包含了一个非空的值,则返回true
,否则返回false
。
如果使用Optional.of()
方法创建一个Optional
对象时,传入了一个空引用,则会抛出NullPointerException
异常,而不是返回一个包含空值的Optional
对象。因此,如果使用Optional.of()
方法创建的Optional
对象中包含了一个空引用,则调用optional.isPresent()
方法会返回false
,而不是检查空字符串。
如果需要检查一个空字符串,可以使用Optional.ofNullable()
方法创建一个Optional
对象,例如:
String str = "";
Optional<String> optional = Optional.ofNullable(str);
if (optional.isPresent()) {
System.out.println("str is not empty");
} else {
System.out.println("str is empty");
}
在上面的示例中,我们首先使用一个空字符串创建一个Optional
对象,然后使用optional.isPresent()
方法检查字符串是否为空。由于字符串为空,因此调用optional.isPresent()
方法会返回false
,所以最终输出结果为"str is empty"。