You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求第三方库内置方法:空对象/空集合转Optional的实现方案

将空/Null对象包装为Optional的第三方库实现

针对你需要把null或空集合(如空List)包装为Optional的场景,以下是几个主流第三方库的可靠实现方案,以及简化的原生Java写法:

Guava 库

Guava的MoreObjects.isEmpty()可以统一判断null或空集合,结合Java原生Optional就能实现需求:

import com.google.common.base.MoreObjects;
import java.util.Optional;

// 示例用法
List<AbstractCorporateAction> cas = stream.toList();
return MoreObjects.isEmpty(cas) ? Optional.empty() : Optional.of(cas);

如果需要通用工具方法,可基于Guava的Iterables.isEmpty()扩展,支持所有Iterable类型:

import com.google.common.collect.Iterables;
import java.util.Optional;

public static <T extends Iterable<?>> Optional<T> toNonEmptyOptional(T collection) {
    return (collection == null || Iterables.isEmpty(collection)) 
        ? Optional.empty() 
        : Optional.of(collection);
}

Apache Commons Lang/Collections

利用Apache Commons Collections的CollectionUtils.isNotEmpty()(同时处理null和空集合),结合Optional:

import org.apache.commons.collections4.CollectionUtils;
import java.util.Optional;

// 示例用法
List<AbstractCorporateAction> cas = stream.toList();
return CollectionUtils.isNotEmpty(cas) ? Optional.of(cas) : Optional.empty();

若要支持更多空对象类型(如Map、String),可基于Commons Lang的ObjectUtils和CollectionUtils封装通用方法:

import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import java.util.Optional;

public static <T> Optional<T> toNonEmptyOptional(T obj) {
    if (obj == null) {
        return Optional.empty();
    }
    if (obj instanceof Iterable<?> && CollectionUtils.isEmpty((Iterable<?>) obj)) {
        return Optional.empty();
    }
    if (obj instanceof Map<?,?> && MapUtils.isEmpty((Map<?,?>) obj)) {
        return Optional.empty();
    }
    if (obj instanceof String && ((String) obj).isEmpty()) {
        return Optional.empty();
    }
    return Optional.of(obj);
}

Spring Framework

如果项目中使用Spring,可直接用Spring自带的CollectionUtils.isEmpty():

import org.springframework.util.CollectionUtils;
import java.util.Optional;

// 示例用法
List<AbstractCorporateAction> cas = stream.toList();
return CollectionUtils.isEmpty(cas) ? Optional.empty() : Optional.of(cas);

Java 9+ 原生简化写法

无需第三方库,Java 9及以上可通过Optional.ofNullable()结合filter一行实现:

List<AbstractCorporateAction> cas = stream.toList();
return Optional.ofNullable(cas).filter(list -> !list.isEmpty());

该写法会自动处理null(转为Optional.empty()),同时过滤掉空列表,最终仅返回包含非空列表的Optional。

内容的提问来源于stack exchange,提问作者ahrooran

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 12:21:28