最近接手 java 开发的后端项目,发现在对前端传入的参数进行处理过程比较繁琐,比如对集合的判 null 处理方式如下:

List<String> ids = CollectionUtils.isEmpty(request.getIds()) ? new ArrayList<>() : request.getIds();

在类似参数较多时,代码观感较差,且编写繁琐,通过查找资料,找到几种较简单的方式,记录如下以备查询:

// 方法一:
// 如果参数非空,则返回给定参数的 Optional,否则返回 orElse 里面的 Optional。
import java.util.Optional;
List<String> ids = Optional.ofNullable(request.getIds()).orElse(new ArrayList<>());

// 方法二:
// 如果第一个参数为非空,则返回第一个参数,否则返回非空的第二个参数。如果两个参数都为空,则抛出空指针异常。
import java.util.Objects;
List<String> ids = Objects.requireNonNullElse(request.getIds(), new ArrayList<>());

// 方法三:
// 如果第一个参数为非空,则返回第一个参数,否则返回第二个参数。
import cn.hutool.core.util.ObjectUtil;
List<String> ids = ObjectUtil.defaultIfNull(request.getIds(), new ArrayList<>());

// 方法四:
// 如果第一个参数为非空,则返回第一个参数,否则返回第二个参数。
import org.apache.commons.collections4.ListUtils;
List<String> ids = ListUtils.defaultIfNull(request.getIds(), new ArrayList<>());

如果参数不需要在后续进行内容变更(如 add),可直接使用静态空集合 Collections.emptyList() 以减少开销,如下:

// 方法一:
// 如果参数非空,则返回给定参数的 Optional,否则返回 orElse 里面的 Optional。
import java.util.Optional;
List<String> ids = Optional.ofNullable(request.getIds()).orElse(Collections.emptyList());

// 方法二:
// 如果第一个参数为非空,则返回第一个参数,否则返回非空的第二个参数。如果两个参数都为空,则抛出空指针异常。
import java.util.Objects;
List<String> ids = Objects.requireNonNullElse(request.getIds(), Collections.emptyList());

// 方法三:
// 如果第一个参数为非空,则返回第一个参数,否则返回第二个参数。
import cn.hutool.core.util.ObjectUtil;
List<String> ids = ObjectUtil.defaultIfNull(request.getIds(), Collections.emptyList());

// 方法四:
// 如果第一个参数为非空,则返回第一个参数,否则返回第二个参数。
import org.apache.commons.collections4.ListUtils;
List<String> ids = ListUtils.defaultIfNull(request.getIds(), Collections.emptyList());

由于 Collections.emptyList()static final,因此上述集合 ids 内容无法通过 add 等方式进行变更。此时最后一种方式甚至可以写成如下方式:

// 方法五:
// 如果参数为非空,则返回原参数,否则返回 Collections.emptyList()。
import org.apache.commons.collections4.ListUtils;
List<String> ids = ListUtils.emptyIfNull(request.getIds());

如果后续无需对参数进行内容变更操作,建议使用最简洁的 ListUtils.emptyIfNull

上述提到的几个 java 方法以及所在工具类还有其他妙用,这边就不一一展开,有兴趣的小伙伴可以自行查看相关文档或源码。

如果觉得我的文章对你有用,请点个赞