在Optional中,什么时候应该用map,什么时候应该用flatMap
时间: 2024-05-13 12:13:51 浏览: 17
在Optional中,应该使用map当你想对Optional中的值进行一些操作并返回一个新的Optional值,而不是修改原始值。例如,你可以使用map将Optional<String>转换为Optional<Integer>:
```
Optional<String> str = Optional.of("123");
Optional<Integer> num = str.map(Integer::parseInt);
```
在这个例子中,我们使用map将字符串值转换为整数值,并返回一个新的Optional<Integer>。
另一方面,应该使用flatMap当你想对Optional中的值进行一些操作,并返回一个不同类型的值。例如,你可以使用flatMap将Optional<String>转换为Optional<Integer>:
```
Optional<String> str = Optional.of("123");
Optional<Integer> num = str.flatMap(s -> {
try {
return Optional.of(Integer.parseInt(s));
} catch (NumberFormatException e) {
return Optional.empty();
}
});
```
在这个例子中,我们使用flatMap将字符串值转换为整数值,并返回一个新的Optional<Integer>。注意,在flatMap的lambda表达式中,我们必须返回一个Optional,因为我们可能会在转换过程中遇到异常。如果我们返回一个整数值,那么它将被包装在一个新的Optional中,这不是我们想要的结果。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)