Optional 更高级的用法介绍一下吧
时间: 2024-05-07 09:21:41 浏览: 76
当我们在使用 Optional 类型时,除了常规的判断是否为 null,还有一些更高级的用法可以探索。下面列举几个常见的用法:
1. 使用 orElseThrow() 方法抛出异常
如果我们确定 Optional 对象中一定存在一个非 null 的值,可以使用 orElseThrow() 方法来获取该值,如果 Optional 对象中没有值,则抛出指定的异常。例如:
```
Optional<String> optional = Optional.ofNullable("hello");
String value = optional.orElseThrow(() -> new RuntimeException("Value is not present"));
System.out.println(value); // 输出 hello
```
如果 Optional 对象中没有值,则会抛出 RuntimeException 异常,并且不会输出任何信息。
2. 使用 map() 方法对 Optional 对象中的值进行转换
我们可以使用 map() 方法对 Optional 对象中的值进行转换。例如,将 Optional<String> 转换为 Optional<Integer>,代码如下:
```
Optional<String> optional = Optional.ofNullable("123");
Optional<Integer> integerOptional = optional.map(Integer::valueOf);
System.out.println(integerOptional.get()); // 输出 123
```
如果 Optional 对象中的值不能转换为 Integer 类型,则会抛出 NumberFormatException 异常。
3. 使用 flatMap() 方法对 Optional 对象进行合并
如果我们需要将两个 Optional 对象合并为一个,可以使用 flatMap() 方法。例如:
```
Optional<String> optional1 = Optional.ofNullable("hello");
Optional<String> optional2 = Optional.ofNullable("world");
Optional<String> result = optional1.flatMap(s1 -> optional2.map(s2 -> s1 + " " + s2));
System.out.println(result.get()); // 输出 hello world
```
在上面的例子中,我们将 optional1 和 optional2 合并为一个 Optional<String> 对象,并将它们中间用空格隔开。
4. 使用 filter() 方法对 Optional 对象进行过滤
filter() 方法用于过滤 Optional 对象中的值。我们可以使用它来过滤出符合指定条件的值。例如:
```
Optional<String> optional = Optional.ofNullable("hello");
optional.filter(s -> s.length() > 5).ifPresent(System.out::println); // 输出 hello
```
在上面的例子中,我们过滤出长度大于 5 的字符串,并将其输出。
这些都是 Optional 类型的一些高级用法,希望对你有所帮助。
阅读全文