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());`
您可能希望尝试将
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());