Java 8中列表为空时返回null的实现(无if语句修改方法)
Java 8列表空值处理问题解答
嘿,我来帮你搞定这两个问题:
1. 如何在Java 8中实现列表为空时返回null?
在Java 8里,我们可以借助Optional结合过滤操作,不用写显式的if语句就能实现这个需求。核心思路是先判断列表是否为非null且非空,如果不满足这个条件就返回null。示例代码如下:
public static <T> List<T> returnNullIfEmpty(List<T> list) { return Optional.ofNullable(list) .filter(l -> !l.isEmpty()) .orElse(null); }
简单解释下:
Optional.ofNullable(list):把可能为null的列表包装成Optional,避免空指针异常filter(l -> !l.isEmpty()):只保留非空的列表,空列表会被过滤掉orElse(null):如果Optional里没有值(也就是原列表是null或空),就返回null
2. 修改默认方法,列表为空时返回null且不使用if语句
针对你给出的默认方法,我们可以调整逻辑,用Optional来控制流程:只有当传入的filters列表非null且非空时,才执行拼接操作,否则直接返回null。修改后的代码如下:
default String getFiltersExpression(List<WorklistViewDto.Filter> filters) { return Optional.ofNullable(filters) .filter(f -> !f.isEmpty()) .map(f -> f.stream() .map(WorkListViewMapper::formatValue) .map(fmt -> fmt.getCriteria() + fmt.getOperator() + fmt.getValue()) .collect(Collectors.joining(" AND ", "(", ")"))) .orElse(null); }
为什么这样可行?
- 先通过
Optional.ofNullable(filters)处理null的情况,再用filter过滤空列表,只有满足“非null且非空”的列表才会进入map方法 map里就是你原来的流拼接逻辑,生成最终的表达式字符串- 如果列表是null或空,Optional会直接走到
orElse(null),返回null,完全不用写if语句
内容的提问来源于stack exchange,提问作者alma elghoul
相关产品推荐
相关产品推荐

