![](/img/trans.png)
[英]Mockito when().thenReturn() Returning Null when it should return empty list
[英]How to return null when list is empty in Java 8?
如果作为参数传递的列表为空而不使用if
语句,我该如何更改此方法以使其返回null
?
default String getFiltersExpression(List<WorklistViewDto.Filter> filters) {
return Optional.ofNullable(filters)
.map(Collection::stream)
.orElseGet(Stream::empty)
.map(WorkListViewMapper::formatValue)
.map(f -> f.getCriteria() + f.getOperator() + f.getValue())
.collect(Collectors.joining(" AND ", "(", ")"));
}
您可以使用Collectors.collectingAndThen 来完成。
.collect(
Collectors.collectingAndThen(
Collectors.joining(),
str->{
if(str.isEmpty()) return null;
return str;
}
)
);
鉴于 OP 的加入声明, Collectors.joining(" AND ", "(", ")")
我们可以修改上面的内容。
Collectors.collectingAndThen(
Collectors.joining(" AND "),
str->{
if(str.isEmpty()) return null;
return "(" + str + ")";
})
我建议不要返回 null 而是返回一个"()"
字符串作为过滤器表达式,你可以在那里为一个空列表附加一个过滤器:
String getFiltersExpression(List<Filter> filters) {
return Optional.ofNullable(filters)
.filter(l -> !l.isEmpty())
.map(Collection::stream)
.orElseGet(Stream::empty)
.map(WorkListViewMapper::formatValue)
.map(f -> f.getCriteria() + f.getOperator())
.collect(Collectors.joining(" AND ", "(", ")"));
}
使用 Java-9 语法:
String getFiltersExpressions(List<Filter> filters) {
return Stream.ofNullable(filters)
.flatMap(Collection::stream)
.map(WorkListViewMapper::formatValue)
.map(f -> f.getCriteria() + f.getOperator() + f.getValue())
.collect(Collectors.joining(" AND ", "(", ")"));
}
另一种方法是仅当列表非空且非空时才开始流式传输:
default String getFiltersExpression(List<WorklistViewDto.Filter> filters) {
return Optional.ofNullable(filters)
.filter(fs -> !fs.isEmpty())
.map(fs -> fs.stream()
.map(WorkListViewMapper::formatValue)
.map(f -> f.getCriteria() + f.getOperator() + f.getValue())
.collect(Collectors.joining(" AND ", "(", ")")))
.orElse(null);
}
然后你得到 null 而不是()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.