У меня определен интерфейс для всех фильтров:
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);
}