java实现处理对象不为空则返回,为空则继续

 更新时间:2025年12月25日 09:45:32   作者:悟能不能悟  
在Java中有多种方法可以处理对象不为空则返回,为空则继续的逻辑,本文为大家整理了几种常见的实现方式,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

在Java中有多种方法可以处理对象不为空则返回,为空则继续的逻辑。以下是几种常见的实现方式:

1. 传统 if-else 方式

public Object processObject(Object obj) {
    if (obj != null) {
        return obj;
    }
    // 继续执行其他逻辑
    return doSomethingElse();
}

2. 三元运算符(简单条件)

public Object getResult() {
    Object obj = getPossibleNullObject();
    return obj != null ? obj : getDefaultObject();
    // 或者继续执行其他逻辑
}

3. 使用 Optional(Java 8+ 推荐)

import java.util.Optional;

public Object processWithOptional() {
    return Optional.ofNullable(getPossibleNullObject())
                   .orElseGet(() -> {
                       // 对象为空时执行的逻辑
                       return getDefaultValue();
                   });
}

// 或者链式调用
public Object processChain() {
    return Optional.ofNullable(getObject1())
                   .or(() -> Optional.ofNullable(getObject2()))
                   .orElse(getDefaultObject());
}

4. 链式空值检查

public Object getFirstNonNull() {
    Object obj1 = getObject1();
    if (obj1 != null) return obj1;
    
    Object obj2 = getObject2();
    if (obj2 != null) return obj2;
    
    Object obj3 = getObject3();
    if (obj3 != null) return obj3;
    
    return getDefaultObject();
}

5. 实用工具方法

public class ObjectUtils {
    
    public static <T> T getFirstNonNull(Supplier<T>... suppliers) {
        for (Supplier<T> supplier : suppliers) {
            T result = supplier.get();
            if (result != null) {
                return result;
            }
        }
        return null;
    }
    
    // 使用示例
    public void example() {
        Object result = getFirstNonNull(
            () -> getObject1(),
            () -> getObject2(),
            () -> getObject3()
        );
    }
}

6. 在 Stream 中使用(Java 8+)

import java.util.stream.Stream;

public Object getFromStream() {
    return Stream.of(getObject1(), getObject2(), getObject3())
                 .filter(obj -> obj != null)
                 .findFirst()
                 .orElse(getDefaultObject());
}

7. 使用 Apache Commons Lang 或 Guava

Apache Commons Lang:

import org.apache.commons.lang3.ObjectUtils;

public Object getWithApache() {
    return ObjectUtils.firstNonNull(
        getObject1(),
        getObject2(),
        getObject3()
    );
}

Google Guava:

import com.google.common.base.MoreObjects;
import com.google.common.base.Supplier;

public Object getWithGuava() {
    return MoreObjects.firstNonNull(
        getObject1(),
        getObject2()
    );
}

实际应用示例

public class UserService {
    
    public User findUser(String id) {
        // 尝试从缓存获取
        User user = cache.get(id);
        if (user != null) {
            return user;  // 不为空则返回
        }
        
        // 缓存为空,继续从数据库获取
        user = database.get(id);
        if (user != null) {
            cache.put(id, user);  // 存入缓存
            return user;
        }
        
        // 都没有找到,返回默认值
        return User.ANONYMOUS;
    }
    
    // 使用 Optional 的优雅写法
    public User findUserElegant(String id) {
        return Optional.ofNullable(cache.get(id))
                       .or(() -> Optional.ofNullable(database.get(id)))
                       .map(user -> {
                           cache.put(id, user);
                           return user;
                       })
                       .orElse(User.ANONYMOUS);
    }
}

推荐

对于简单的条件判断,使用传统 `if-else` 最直观

对于复杂的空值处理链,推荐使用 Java 8+ 的 `Optional`,代码更清晰

如果项目中已经有 Apache Commons 或 Guava,可以使用它们的工具类

对于性能敏感的场景,传统 if-else 可能更快

到此这篇关于java实现处理对象不为空则返回,为空则继续的文章就介绍到这了,更多相关java处理对象不为空内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java利用 Exchanger 实现游戏中交换装备

    Java利用 Exchanger 实现游戏中交换装备

    JDK 1.5 开始 JUC 包下提供的 Exchanger 类可用于两个线程之间交换信息。下面我们就来看看Java是如何利用Exchanger一行代码实现游戏中交换装备的
    2021-09-09
  • Springboot如何集成websocket

    Springboot如何集成websocket

    这篇文章主要介绍了Springboot如何集成websocket问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • JAVA LinkedList和ArrayList的使用及性能分析

    JAVA LinkedList和ArrayList的使用及性能分析

    JAVA LinkedList和ArrayList的使用及性能分析,这篇文章也是以JAVA List的总结。
    2013-11-11
  • Java获取UTC时间的方法详解

    Java获取UTC时间的方法详解

    这篇文章主要介绍了Java获取UTC时间的方法,结合具体实例形式详细分析了Java针对时区、本地时间、时间偏移量等相关操作技巧,需要的朋友可以参考下
    2017-04-04
  • SpringBoot中的分布式追踪及使用详解

    SpringBoot中的分布式追踪及使用详解

    随着互联网应用程序的复杂性不断增加,分布式系统已经成为了许多企业级应用程序的标配,由于服务之间的调用关系错综复杂,很难追踪到一个请求在整个系统中的执行路径和时间,为了解决这个问题,本文将介绍SpringBoot中的分布式追踪技术及其使用方法
    2023-07-07
  • Java日常练习题,每天进步一点点(26)

    Java日常练习题,每天进步一点点(26)

    下面小编就为大家带来一篇Java基础的几道练习题(分享)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧,希望可以帮到你
    2021-07-07
  • 解决springboot文件上传提示临时文件夹不存在问题

    解决springboot文件上传提示临时文件夹不存在问题

    这篇文章主要介绍了解决springboot文件上传提示临时文件夹不存在问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Java杂谈之如何消除代码中一大串参数列表

    Java杂谈之如何消除代码中一大串参数列表

    参数列表和字面意思差不多,主要是表示该参数数量不是固定的,可能会有一个参数,可能多个,不管多少个参数,都放到一个数组处理,这种参数叫可变参数。可变长参数要放在最后一个参数位置处理,但是一个函数里面不能有俩种类型的可变参数
    2021-10-10
  • Maven在Windows中的配置以及IDE中的项目创建实例

    Maven在Windows中的配置以及IDE中的项目创建实例

    下面小编就为大家带来一篇Maven在Windows中的配置以及IDE中的项目创建实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • win10 64位 jdk1.8的方法教程详解

    win10 64位 jdk1.8的方法教程详解

    这篇文章主要介绍了win10 64位 jdk1.8的方法教程详解,本文给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03

最新评论