Составление би-предиката в нестатическом c контексте - PullRequest
4 голосов
/ 30 января 2020

У меня определен интерфейс для всех фильтров:

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?

Есть ли лучший способ, чем следующий, который я пытался сделать:

  1. Инициализировать allFilters как поле:

    private BiPredicate<Status, Request> allFilters = 
        filters.stream().reduce(BiPredicate::and).orElse((x, y) -> true);
    
  2. Затем вызовите вызов:

    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);
}

Ответы [ 2 ]

0 голосов
/ 30 января 2020

На основании ответа из этого поста

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());
0 голосов
/ 30 января 2020

Возможно, вы захотите попробовать allMatch как

final List<Status> summaries ==this.repo
        .summary(requestParameter)
        .stream()
        .filter(r -> filters.stream()
                .allMatch(f -> f.test(s, requestParameter)))
        .collect(Collectors.toList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...