【发布时间】:2020-01-30 10:34:59
【问题描述】:
我为所有过滤器定义了接口:
public interface Filter<I, C> extends BiPredicate<I, C> {}
我将所有这些过滤器作为一个列表注入到我的服务类中:
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);
}
【问题讨论】:
-
您所说的“更好”是指一种在一个声明中做到这一点的方法吗?
-
更好的意思是避免将
allFilters初始化为类变量,而是结合方法中的函数并测试并返回结果。 -
在我看来,你实现的比你想要的要好。
标签: java java-8 java-stream predicate