有一项服务带有四个参数,这些参数用于从缓存存储中过滤数据并以列表形式返回结果。
假设所有参数都可以为null或为空,并且仍然需要根据其余参数返回匹配的数据(如果所有参数为空,则返回未过滤的数据。)>
目前,它首先检查if ... else语句中的参数是否为空,然后将其与列表中的and
过滤器一起使用。这导致了八个if..else结构。
这是对所有可能的参数组合重复8次:
Predicate<Response> predicate1= e -> StringUtils.isBlank(parameter1) ? false
: StringUtils.containsIgnoreCase(e.getter(), parameter1);
if (!StringUtils.isBlank(parameter1) && !StringUtils.isBlank(parameter2)
&& !StringUtils.isBlank(parameter3)) {
return response.stream()
.filter((predicate1.or(predicate2)).and(predicate3).and(predicate4))
.collect(Collectors.toList());
}
在Java 8中是否有更好的方法来执行此操作?如此重复似乎是一种浪费,但是不确定Java中是否有更好的函数可靠地执行此操作。
PS:parameter1可以是ID或位置文本。它用于谓词1和2。
[有一项服务接受四个参数,这些参数用于过滤来自缓存存储区的数据并将结果作为列表返回。假设所有参数都可以为null或为空,并且...
如果我理解正确,当不存在参数时,谓词为true。