最近接手 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 方法以及所在工具类还有其他妙用,这边就不一一展开,有兴趣的小伙伴可以自行查看相关文档或源码。
版权属于:瞭月
本文链接:https://www.lervor.com/archives/274/
版权声明:本文为瞭月原创文章,转载请附上原文出处链接和本声明。
3 条评论
大佬 不弄个群么? 大家一起交流
大佬你这个登录放在哪里啊 想看个评论
不需要登录,都能看