编写和过滤Java列表过滤器的干净方法

时间:2019-12-16 10:19:58

标签: java caching boolean-logic

有一项服务带有四个参数,这些参数用于过滤缓存存储中的数据并将结果作为列表返回。

假设所有参数都可以为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。

0 个答案:

没有答案