在非静态上下文中构成双向谓词

问题描述 投票:1回答:1

我为所有过滤器定义了接口:

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中的所有过滤器。如何将statusrequestParameter传递给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);
}
java java-8 java-stream predicate
1个回答
0
投票

您可能想尝试allMatch as >>

final List<Status> summaries ==this.repo
        .summary(requestParameter)
        .stream()
        .filter(r -> filters.stream()
                .allMatch(f -> f.test(s, requestParameter)))
        .collect(Collectors.toList();

0
投票

基于answer from this post

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());
© www.soinside.com 2019 - 2024. All rights reserved.