为 return 组谓词创建方法

Create a method for return set of Predicates

我创建了 3 个谓词,用于此服务的一个方法中 class。这些是当前在一个方法中的 3 个谓词。但是在实施这个项目时,这些谓词似乎也可用于其他服务方法。

因此,有什么方法可以将它们放入一个单独的方法中,并在我们想要获取这些谓词时调用该方法吗? 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()));

一个选项是创建一个 returns a 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 和 returns 布尔值的方法,完全不使用谓词 @Lino:

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());