有一项服务带有四个参数,这些参数用于过滤缓存存储中的数据并将结果作为列表返回。
假设所有参数都可以为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。