Java 在非静态上下文中组合双谓词

Java 在非静态上下文中组合双谓词,java,java-8,java-stream,predicate,Java,Java 8,Java Stream,Predicate,我为所有过滤器定义了接口: public interface Filter<I, C> extends BiPredicate<I, C> {} 然后调用调用: this.repo.statusSummary(request) .stream() .filter(status -> applyFilters(status, request)) .collect(toList());` applyFilters(): 您可能希望尝试将a

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

public interface Filter<I, C> extends BiPredicate<I, C> {}
  • 然后调用调用:

    this.repo.statusSummary(request)
        .stream()
        .filter(status -> applyFilters(status, request))
        .collect(toList());`
    
  • applyFilters():


    您可能希望尝试将
    allMatch
    作为

    final List<Status> summaries ==this.repo
            .summary(requestParameter)
            .stream()
            .filter(r -> filters.stream()
                    .allMatch(f -> f.test(s, requestParameter)))
            .collect(Collectors.toList();
    
    final List summaries==this.repo
    .summary(请求参数)
    .stream()
    .filter(r->filters.stream()
    .allMatch(f->f.test(s,requestParameter)))
    .collect(收集器.toList();
    
    基于

    final List getStatus=this.repo
    .摘要(请求)
    .stream()
    .filter(status->this.filters.stream().reduce(BiPredicate::and).orElse((x,y)->true).test(status,request))
    .collect(toList());
    
    所说的“更好”,您是指在一条语句中实现它的方法吗?所说的更好,我的意思是避免将
    allFilters
    初始化为类变量,而是将方法中的函数组合起来,测试并返回结果。在我看来,您实现的比您正在寻找的更好。是调用
    allMatch()
    执行与我的答案完全相同的操作?它将应用并检查所有定义的过滤器?@M06H yes它将
    测试列表中所有现有过滤器的
    this.repo.statusSummary(request)
        .stream()
        .filter(status -> applyFilters(status, request))
        .collect(toList());`
    
    private boolean applyFilters(Status status, Request request) {
        return this.allFilters.test(status, request);
    }
    
    final List<Status> summaries ==this.repo
            .summary(requestParameter)
            .stream()
            .filter(r -> filters.stream()
                    .allMatch(f -> f.test(s, requestParameter)))
            .collect(Collectors.toList();
    
    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());