如何优雅的判断一个对象是否为空?

如何优雅的判断一个对象是否为空?

Optional介绍

  • Optional是一个容器类,它只有两种情况:
    • 要么包含一个非空对象
    • 要么为空
  • 它有助于编写更健壮的代码,以处理可能为空的值,而不必担心空指针异常!

Optional用法

Optional的创建

  • Optional有以下两种常见的创建方法:
    • Optional.of(T value):创建一个包含非空值的Optional,如果value为null,则抛出NullPointerException
    • Optional.ofNullable(T value):创建一个Optional,允许value为null

判断Optional容器中是否包含对象

  • isPresent(): 返回一个布尔值,如果Optional容器中包含一个非空对象则返回true,否则返回false

获取Optional容器的对象

  • get(): 如果Optional包含非空值,返回该值;否则抛出NoSuchElementException
  • orElse(T other): 如果Optional为空,返回指定的默认值other
  • orElseGet(Supplier other): 如果Optional为空,使用提供的Supplier函数生成默认值
  • orElseThrow(Supplier exceptionSupplier): 如果Optional为空,抛出由提供的Supplier函数生成的异常

过滤

  • filter(Predicate predicate): 如果Optional包含非空值且满足predicate条件,则返回当前Optional,否则返回一个空Optional。

映射

  • map(Function mapper): 如果Optional包含非空值,应用mapper函数并返回新的Optional。
  • flatMap(Function mapper): 类似于map,但允许mapper函数返回Optional。

Optional示例

  • 假如我们有一个User类,可以使用Optional来处理可能为空的User对象。User类结构如下:

  • public class User {
        private String name;
        
        public User(String name) {
            this.name = name;
        }
        
        public String getName() {
            return name;
        }
    }
    
  • 示例:创建Optional

  • Optional userOptional = Optional.ofNullable(new User("张三"));
    
  • 示例:判断Optional是否包含对象

  • if (userOptional.isPresent()) {
        System.out.println("用户存在:" + userOptional.get().getName());
    } else {
        System.out.println("用户不存在");
    }
    
  • 示例:获取Optional容器的对象

  • User user = userOptional.orElse(new User("李四"));
    System.out.println("User: " + user.getName());
    
  • 示例:过滤

  • Optional filteredUserOptional = userOptional.filter(u -> u.getName().startsWith("张"));
    if (filteredUserOptional.isPresent()) {
        System.out.println("结果:" + filteredUserOptional.get().getName());
    } else {
        System.out.println("未找到对应用户");
    }
    
  • 示例:映射

  • Optional userNameOptional = userOptional.map(User::getName);
    userNameOptional.ifPresent(name -> System.out.println("用户名为: " + name));
    

使用场景总结

  • 当你从某个方法返回一个值,但该值可能为空,而调用者需要明确知道值是否存在。
  • 在处理方法参数时,你可以用Optional来表示某个参数可以为空,以提醒调用者可能会传入null。
  • 避免繁琐的null检查和条件语句,使代码更简洁和可读!

你可能感兴趣的:(JAVA基础工作中实际总结,编程学习,java,开发语言,学习,面试,测试用例)