为 predicate 的返回集创建一个方法

gmxoilav  于 2021-08-25  发布在  Java
关注(0)|答案(1)|浏览(284)

我已经创建了3个 predicate ,它们在这个服务类的一个方法中使用。这是当前在一个方法中的3个 predicate 。但在实现这个项目时,这些 predicate 似乎也可用于其他服务方法。
因此,当我们想要得到这些 predicate 时,有没有办法将它们放到一个单独的方法中并调用该方法? predicate 的类型也需要更改。为此,我可以使用像这样的泛型吗 Predicate<T> ?

Predicate<LocalRequestDTO> allFilter = request -> (!StringUtils.isBlank(request.getSuvc())
        && !StringUtils.isBlank(request.getSuffix()) && !StringUtils.isBlank(request.getSite()));
Predicate<LocalRequestDTO> suvcSuffixFilter = request -> (!StringUtils.isBlank(request.getSuvc())
        && !StringUtils.isBlank(request.getSuffix()) && StringUtils.isBlank(request.getSite()));
Predicate<LocalRequestDTO> suvcFilter = request -> (!StringUtils.isBlank(request.getSuvc())
        && StringUtils.isBlank(request.getSuffix()) && StringUtils.isBlank(request.getSite()));
smdncfj3

smdncfj31#

一个选项是创建一个返回 Predicate :

private static Predicate<LocalRequestDTO> allFilter() {
    return request -> (!StringUtils.isBlank(request.getSuvc()) &&
            !StringUtils.isBlank(request.getSuffix()) &&
            !StringUtils.isBlank(request.getSite()));
}
List<LocalRequestDTO> allDto = dtos.stream()
        .filter(allFilter())
        .collect(Collectors.toList());

另一个选项是定义 Predicate 作为常数:

private static final Predicate<LocalRequestDTO> SUVC_FILTER = request ->
        (!StringUtils.isBlank(request.getSuvc()) &&
                StringUtils.isBlank(request.getSuffix()) &&
                StringUtils.isBlank(request.getSite()));
List<LocalRequestDTO> suvcDto = dtos.stream()
        .filter(SUVC_FILTER)
        .collect(Collectors.toList());

或者您可以创建一个方法,该方法接受dto并返回布尔值,而不使用@lino建议的 predicate :

private static boolean doSuvcFilter(LocalRequestDTO request) {
    return !StringUtils.isBlank(request.getSuvc()) && 
            StringUtils.isBlank(request.getSuffix()) && 
            StringUtils.isBlank(request.getSite());
}
List<LocalRequestDTO> suvcDto = dtos.stream()
        .filter(ClassNameContainingMethod::doSuvcFilter)
        .collect(Collectors.toList());

相关问题