我为所有过滤器定义了接口:
public interface Filter<I, C> extends BiPredicate<I, C> {}
我将所有这些过滤器作为列表插入到我的Service类中:
public class SomeClass {
private List<BiPredicate<Status, Request>> filters;
public List<Status> getStatus(final Request requestParameter) {
final List<Status> summaries == this.repo
.summary(requestParameter)
.stream()
.reduce(BiPredicate::and).orElse((x, y) -> true)
.test(); //arg1=status from stream, arg2=requestParameter
}
}
我正在努力完成上述工作,并应用来自集合filters
的所有过滤器。
如何将status
和requestParameter
传递给test()
?我也遇到错误non-static method cannot be referenced from static context
?
是否有比我尝试的方法更好的方法?
将allFilters
初始化为字段:
private BiPredicate<Status, Request> allFilters =
filters.stream().reduce(BiPredicate::and).orElse((x, y) -> true);
然后调用:
this.repo.statusSummary(request)
.stream()
.filter(status -> applyFilters(status, request))
.collect(toList());`
applyFilters():
private boolean applyFilters(Status status, Request request) {
return this.allFilters.test(status, request);
}
答案 0 :(得分:0)
您可能想尝试使用allMatch
作为
final List<Status> summaries ==this.repo
.summary(requestParameter)
.stream()
.filter(r -> filters.stream()
.allMatch(f -> f.test(s, requestParameter)))
.collect(Collectors.toList();
答案 1 :(得分:0)
final List<Status> getStatus = this.repo
.summary(request)
.stream()
.filter(status-> this.filters.stream().reduce(BiPredicate::and).orElse((x, y) -> true).test(status, request))
.collect(toList());