51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Java 集合为 null 时转空集合

最近接手 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 方法以及所在工具类还有其他妙用,这边就不一一展开,有兴趣的小伙伴可以自行查看相关文档或源码。


赞(2)
未经允许不得转载:工具盒子 » Java 集合为 null 时转空集合