use*_*943 5 java java-8 java-stream
我有一个包含 10 个字段的实体:
Class Details{
String item;
String name;
String type;
String origin;
String color;
String quality;
String country;
String quantity;
Boolean availability;
String price;
}
Run Code Online (Sandbox Code Playgroud)
我有一个服务列表的宁静端点。我希望用户能够为每个字段提供搜索过滤器。目前我有每个字段的 QueryParam。然后我使用 java8 流过滤:
List<Detail> details;
details.stream().filter(detail-> detail.getItem()==item).filter(detail-> detail.getName()==name).....collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
如果我有 50 个其他类要过滤多个字段,有没有办法概括这一点?
你可以用.and()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());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7812 次 |
| 最近记录: |