在返回之前筛选收集流中的收集流背景资料问题
2022-09-02 13:31:02
背景资料
我有以下课程:
保险
public class Insurance {
...
}
客户
public class Customer {
private List<Insurance> insurances;
public List<Insurance> getInsurances() {
return insurances;
}
...
}
客户注册表
public class CustomerRegistry {
private List<Customer> customers;
...
}
以及这个帮助器方法,它将 a 简化为单个:List<Predicate<T>>
Predicate<T>
public Predicate<T> reducePredicates(List<Predicate<T>> predicates) {
return predicates.stream()
.reduce(Predicate::and)
.orElse(p -> true);
}
问题
我想做的是获取与过滤器列表匹配的保险列表,这些保险属于与过滤器列表匹配的客户。如果这不清楚,下面的代码有望澄清。
方法位于上面的客户注册表
类中。
public List<Insurance> findInsurances(List<Predicate<Customer>> cusPredicates,
List<Predicate<Insurance>> insPredicates) {
List<Insurance> matches = new LinkedList<>();
customers.stream()
.filter(reducePredicates(cusPredicates)
.forEach(cus -> cus.getInsurances()
.stream()
.filter(reducePredicates(insPredicates))
.forEach(cus -> matches.add(cus)))
return matches;
}
有没有办法在没有列表的情况下做到这一点?我是否可以执行某种减少,以便直接退回匹配的保险(即不添加到像)这样的临时集合中?matches
matches