gpt4 book ai didi

java - 在返回之前在收集流中过滤收集流

转载 作者:搜寻专家 更新时间:2023-10-30 19:43:23 25 4
gpt4 key购买 nike

背景资料

我有以下类(class):

保险

public class Insurance {
...
}

客户

public class Customer {
private List<Insurance> insurances;

public List<Insurance> getInsurances() {
return insurances;
}
...
}

客户注册

public class CustomerRegistry {
private List<Customer> customers;
...
}

还有这个辅助方法,它减少了 List<Predicate<T>>成单Predicate<T> :

public Predicate<T> reducePredicates(List<Predicate<T>> predicates) {
return predicates.stream()
.reduce(Predicate::and)
.orElse(p -> true);
}

问题

我想要做的是获取与过滤器列表匹配的保险列表,这些保险属于与过滤器列表匹配的客户。如果不清楚,下面的代码有望澄清。

方法在里面CustomerRegistry上面的类。

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 这样的临时集合中)吗?

最佳答案

使用 flatMap():

customers.stream()
.filter(reducePredicates(cusPredicates))
.flatMap(cus -> cus.getInsurances().stream())
.filter(reducePredicates(insPredicates))
.collect(Collectors.toList())

或者更好的是,避免一遍又一遍地减少谓词:

Predicate<Customer> customerPredicate = reducePredicates(cusPredicates);
Predicate<Customer> insurancePredicate = reducePredicates(insPredicates);
List<Insurance> =
customers.stream()
.filter(customerPredicate)
.flatMap(cus -> cus.getInsurances().stream())
.filter(insurancePredicate)
.collect(Collectors.toList())

关于java - 在返回之前在收集流中过滤收集流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30196997/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com