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在Excel中创建数据透视表

    使用Java在Excel中创建数据透视表

    在处理销售数据、财务报表或运营指标时,数据透视表是快速汇总和分析大量数据的强大工具,通过 Java 自动化这个过程可以实现定期报告的自动生成,大幅提高工作效率,本文将详细介绍如何使用 Java 在 Excel 工作簿中创建数据透视表,需要的朋友可以参考下
    2026-03-03
  • IDEA 中创建SpringBoot 父子模块的实现

    IDEA 中创建SpringBoot 父子模块的实现

    这篇文章主要介绍了IDEA 中创建SpringBoot 父子模块的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • java下载url路径包含中文需要转义的操作

    java下载url路径包含中文需要转义的操作

    这篇文章主要介绍了java下载url路径包含中文需要转义的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-12-12
  • SpringBoot关闭过程中销毁DisposableBean解读

    SpringBoot关闭过程中销毁DisposableBean解读

    这篇文章主要介绍了SpringBoot关闭过程中销毁DisposableBean解读,一个bean的生命周期,指的是 bean 从创建,初始化,一系列使用,销毁的过程,今天来讲讲 bean 的初始化和销毁的方法,需要的朋友可以参考下
    2023-12-12
  • Spring aop失效的几种解决方案

    Spring aop失效的几种解决方案

    这篇文章主要介绍了Spring aop失效的几种解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • SpringBoot中分页插件PageHelper的使用详解

    SpringBoot中分页插件PageHelper的使用详解

    分页查询是为了高效展示大量数据,通过分页将数据划分为多个部分逐页展示,原生方法需手动计算数据起始行,而使用PageHelper插件则简化这一过程,本文给大家介绍SpringBoot中分页插件PageHelper的使用,感兴趣的朋友一起看看吧
    2024-09-09
  • java解析excel文件的方法

    java解析excel文件的方法

    这篇文章主要介绍了java解析excel文件的方法,这里整理相关的代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下。
    2017-02-02
  • spring boot 开发soap webservice的实现代码

    spring boot 开发soap webservice的实现代码

    这篇文章主要介绍了spring boot 开发soap webservice的实现代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • SpringCloud全局过虑器GlobalFilter的用法小结

    SpringCloud全局过虑器GlobalFilter的用法小结

    这篇文章主要介绍了SpringCloud全局过虑器GlobalFilter的使用,全局过虑器使用非常广泛,比如验证是否登录,全局性的处理,黑名单或白名单的校验等,本文结合示例代码给大家介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • Java中IO流概述

    Java中IO流概述

    大家好,本篇文章主要讲的是Java中IO流概述,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下,方便下次浏览
    2022-01-01

最新评论