首页 > 解决方案 > 在 Java 中,我可以创建一个对多个对象应用过滤器的谓词吗?

问题描述

我有一个谓词,用于过滤同一实体对象的列表:

Predicate<DWHDeal> companyFilter = i -> i.getCompany().equals(company);

我还必须在基于之前的实体构建 DTOS 的 DTO 列表上应用相同的过滤器,在完全相同的字段上使用完全相同的条件:

Predicate<DWHDealDTO> companyFilterDTO = i -> i.getCompany().equals(company);

是否可以在不实例化两个不同谓词的情况下实现这一目标?如果可能的话,我想通过只制作一个Predicate.

标签: javalambdajava-8predicate

解决方案


假设getCompany()返回 aString您可以创建Predicate<String>

Predicate<String> predicate = s -> s.equals(company);

然后像这样使用它:

list.stream()
    .filter(dto -> predicate.test(dto.getCompany()))
    ...

但是没有太多好处,因为它需要几乎相同的代码。


推荐阅读