[英]How to return null when list is empty in Java 8?
How can I change this method so that it returns null
if the list passed as a parameter is empty without using an if
statement?如果作为参数传递的列表为空而不使用
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 ", "(", ")"));
}
You can do it with Collectors.collectingAndThen .您可以使用Collectors.collectingAndThen 来完成。
.collect(
Collectors.collectingAndThen(
Collectors.joining(),
str->{
if(str.isEmpty()) return null;
return str;
}
)
);
Given OP's joining statement, Collectors.joining(" AND ", "(", ")")
we could modify the above.鉴于 OP 的加入声明,
Collectors.joining(" AND ", "(", ")")
我们可以修改上面的内容。
Collectors.collectingAndThen(
Collectors.joining(" AND "),
str->{
if(str.isEmpty()) return null;
return "(" + str + ")";
})
I would recommend not returning null and rather returning a "()"
string as the filter expression for this you can just append a filter for an empty list there as :我建议不要返回 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 ", "(", ")"));
}
Using Java-9 syntax :使用 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 ", "(", ")"));
}
An alternative way is to start streaming only if the list is non null and non empty:另一种方法是仅当列表非空且非空时才开始流式传输:
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);
}
Then you get null instead of ()
.然后你得到 null 而不是
()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.