java - 在 Java 中,我可以创建一个对多个对象应用过滤器的谓词吗?
问题描述
我有一个谓词,用于过滤同一实体对象的列表:
Predicate<DWHDeal> companyFilter = i -> i.getCompany().equals(company);
我还必须在基于之前的实体构建 DTOS 的 DTO 列表上应用相同的过滤器,在完全相同的字段上使用完全相同的条件:
Predicate<DWHDealDTO> companyFilterDTO = i -> i.getCompany().equals(company);
是否可以在不实例化两个不同谓词的情况下实现这一目标?如果可能的话,我想通过只制作一个Predicate
.
解决方案
假设getCompany()
返回 aString
您可以创建Predicate<String>
:
Predicate<String> predicate = s -> s.equals(company);
然后像这样使用它:
list.stream()
.filter(dto -> predicate.test(dto.getCompany()))
...
但是没有太多好处,因为它需要几乎相同的代码。