我有一个包含 10 个字段的实体:
Class Details{
String item;
String name;
String type;
String origin;
String color;
String quality;
String country;
String quantity;
Boolean availability;
String price;
}
我有一个服务于列表的 Restful 端点。我希望用户能够为每个字段提供搜索过滤器。 目前我对每个字段都有 QueryParam。然后我使用 java8 流进行过滤:
List<Detail> details;
details.stream().filter(detail-> detail.getItem()==item).filter(detail-> detail.getName()==name).....collect(Collectors.toList());
如果我有 50 个包含多个字段的其他类要过滤,是否有一种概括方法?
最佳答案
你可以用 .and()
组成这样的谓词和 .or()
,允许您定义一个聚合谓词来应用您想要的所有检查,而不是尝试链接 n .filter()
调用。这使得可以在运行时构造任意复杂的谓词成为可能。
// Note that you shouldn't normally use == on objects
Predicate<Detail> itemPredicate = d-> item.equals(d.getItem());
Predicate<Detail> namePredicate = d-> name.equals(d.getName());
details.stream()
.filter(itemPredicate.and(namePredicate))
.collect(Collectors.toList());
关于java - 在java中按多个字段过滤的最佳方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42679295/