Java8之Optional简介说明

欣喜 Java经验 发布时间:2024-02-07 15:35:05 阅读数:5326 1
下文笔者讲述java8中Optional的简介说明,如下所示

Optional简介

Optional是一个容器类
   常指一个值存在或不存在

由于java中没有空安全类型,任何对象都可能出现null
   从而导致NullPointerException异常
   即Optional出现使
      我们可以更好的处理null值
下文笔者将依次讲述Optional的相关操作简介说明,如下所示

创建Optional对象

创建一个非空的Optional

// 使用of方法创建包含值的Optional。参数不能为null,否则会立即抛出NullPointerException。
Optional<String> optional = Optional.of("Hello World");

创建一个可能为空Optional

 
// 使用ofNullable方法创建可以包含null的Optional
  当参数为null
  它将创建一个空Optional对象
Optional<String> optionalNullable = Optional.ofNullable(null);

访问Optional对象值

使用get()方法
    获取Optional值
当Optional为空则抛出NoSuchElementException异常 
String value = optional.get();

使用isPresent()方法来检查Optional是否有值

// isPresent方法用于检查Optional实例中是否包含非null值。
if (optional.isPresent()) {
    System.out.println("Value found - " + optional.get());
}

使用ifPresent()方法进行更优雅的检查和使用
 
// ifPresent方法接收一个Consumer(消费者)参数
  仅当Optional中有值存在时,才执行传入的Lambda表达式(或方法引用)。
optional.ifPresent(value -> System.out.println("Value found - " + value));

在Optional为空的时候提供一个备用值
 可使用orElse()方法
 
// orElse方法允许在Optional对象不包含值时提供一个备选值。
String nullDefault = optionalNullable.orElse("Default Value");
System.out.println(nullDefault); // 输出:Default Value
  或
 使用orElseGet()方法进行延迟计算备用值
String value = optional.orElseGet(() -> "default value");

链式调用Optional

Optional支持链式方法调用
 如map和flatMap
  使得它能够和Java 8其他特性
  如:
   Stream和lambda表达式一起更好地工作

map和flatMap

map和flatMap方法
  在函数式编程中用得非常广泛
  在Optional中被定义:

// 假设有一个方法parse(String str),str可能为null,解析后的结果也可能为null
Optional<String> str = Optional.ofNullable(getStr());
// 不使用map,我们需要进行两次null检查
if(str != null){
    String result = parse(str);
    if(result != null){
        System.out.println(result);
    }
}
// 使用Optional和map,可以避免显示null检查
str.map(this::parse).ifPresent(System.out::println);
注意
  map操作需要Function作为参数 
  方法不能返回Optional类型
 如果你要返回Optional
  你应该使用flatMap
  否则你会得到套装的Optional
 
// 使用map,你会得到Optional<Optional<Integer>>
Optional<Optional<Integer>> nestedOptional = str.map(this::parseToOptional);
// 使用flatMap,你会得到Optional<Integer>
Optional<Integer> flatOptional = str.flatMap(this::parseToOptional);

filter

filter方法与Stream中的filter类似
  接收Predicate参数
  用于测试Optional中是否有值符合给定的条件
 
Optional<String> filtered = str.filter(val -> val.length() > 3);
// 如果Optional中的值长度大于3,那么仍旧返回包含该值的Optional
// 否则返回一个空的Optional实例
 Optional并不是用来替换所有的null
 将会减少Bug的出现
版权声明

本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。

本文链接: https://www.Java265.com/JavaJingYan/202402/17072913337941.html

最近发表

热门文章

好文推荐

Java265.com

https://www.java265.com

站长统计|粤ICP备14097017号-3

Powered By Java265.com信息维护小组

使用手机扫描二维码

关注我们看更多资讯

java爱好者