gpt4 book ai didi

Java流匹配尽可能多的谓词

转载 作者:行者123 更新时间:2023-12-01 17:49:34 25 4
gpt4 key购买 nike

希望根据定义为谓词的某些条件来过滤列表(下面只是示例):

Predicate<Person> agePredicate = p -> p.age < 30;
Predicate<Person> dobPredicate = p -> p.dateOfBirth < 1980;
Predicate<Person> namePredicate = p -> p.name.startWith("a");

List<Predicate<Person>> predicates = Arrays.asList(agePredicate, dobPredicate, namePredicate);

List<Person> shortListPersons = listPersArrays.asList(listPersons).stream().filter(p -> predicates.stream().allMatch(f -> f.test(p))).limit(10).collect(Collectors.toList());

在我找不到任何人/足够的人的情况下,我如何获得符合尽可能多的条件的人员列表 - 一种排名。

我的另一个选择是再次调用与上面相同的函数,但使用 anyMatch 代替,但它不会很准确。

有什么想法吗?谢谢!

最佳答案

从您的问题中给出的代码开始:

List<Predicate<Person>> predicates = Arrays.asList(agePredicate, dobPredicate, namePredicate);

我们可以根据人员匹配的谓词数量对人员列表进行排序:

List<Person> sortedListOfPeopleByPredicateMatchCOunt = 
listPersArrays
.asList(listPersons)
.stream()
.sorted(
Comparator.comparingLong(p -> predicates.stream().filter(predicate -> predicate.test(p)).count()))
// Reverse because we want higher numbers to come first.
.reversed())
.collect(Collectors.toList());

关于Java流匹配尽可能多的谓词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51889304/

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