为Java中的列表过滤编写AND过滤器的干净方法

问题描述 投票:0回答:1

有一项服务带有四个参数,这些参数用于从缓存存储中过滤数据并以列表形式返回结果。

假设所有参数都可以为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或为空,并且...

java caching boolean-logic
1个回答
0
投票

如果我理解正确,当不存在参数时,谓词为true。

© www.soinside.com 2019 - 2024. All rights reserved.