我的目标是筛选出最佳匹配。在我的例子中,我有一个人员列表,我想按姓氏和名字过滤。
匹配的预趋势将是:
我目前为止的代码:
final List<Person> persons = Arrays.asList(
new Person("Doe", "John"),
new Person("Doe", "Jane"),
new Person("Munster", "Herman");
Person person = persons.stream().filter(p -> p.getSurname().equals("Doe")).???
我会提出这个建议:
Optional<Person> bestMatch = persons.stream()
.filter(p -> "Doe".equals(p.getSurname()))
.reduce((person, person2) -> {
if ("John".equals(person.getFirstName())) {
return person;
} else if ("John".equals(person2.getFirstName())) {
return person2;
}
return person;
});
Person result = bestMatch.orElseThrow(IllegalArgumentException::new);
你可以用
Person person = persons.stream()
.filter(p -> p.getSurName().equals("Doe"))
.max(Comparator.comparing(p -> p.getFirstName().equals("Jane")))
.orElse(null);
它将只考虑具有正确姓氏的元素,并返回其中最好的元素,即具有匹配名字的元素。否则,返回第一个匹配的元素。
正如在注释中已经提到的,如果存在最佳元素,for
循环可能会更有效,因为它可能会短路。如果没有匹配姓氏和名字的最佳元素,则必须在所有实现中检查所有元素。
假设Person实现了equals和hashCode:
Person personToFind = new Person("Doe", "Jane");
Person person = persons.stream()
.filter(p -> p.equals(personToFind))
.findFirst()
.orElseGet(() ->
persons.stream()
.filter(p -> p.getSurname().equals(personToFind.getSurname()))
.findFirst()
.orElseThrow(() -> new RuntimeException("Could not find person ..."))
);
问题内容: 我有一个包含单词的表和一个输入字段,可使用实时搜索来搜索该表。当前,我使用以下查询来搜索表: 有没有一种方法可以对结果进行排序,以使在单词开头找到字符串的字符串排在最前面,而在单词后面出现字符串的字符串排在最后呢? 例如:搜索“ hab ”当前返回 一个 lphabet ^ h 升技 [R EHAB 但我想这样: 赞 一下(首先是因为“赞”是开始) alp hab et(第二个原因是’
问题内容: 我试图模糊匹配两个csv文件,每个文件包含一列名称,它们相似但不相同。 到目前为止,我的代码如下: 输出如下: 该脚本工作正常。输出是预期的。但是我所寻找的只是最佳的匹配。 因此,我需要基于第2列中的最大值,以某种方式删除第1列中的重复名称。这应该相当简单,但是我似乎无法弄清楚。任何帮助,将不胜感激。 问题答案: Fuzzywuzzy会以反向排序的顺序返回列表,最佳匹配排在最前面。 因
在我的Django项目中,我在项目的根目录中有一个静态文件夹(靠近manage.py),所以在settings.py中,为了找到这个静态文件,我有: STATICFILES_DIRS=[os.path.join(BASE_DIR,'static'),] 如何配置?现在我想: STATIC_ROOT=os.path.join(BASE_DIR,“static/”) 但当我运行collectstati
我在Firestore中收集了一组文档,其中有一个字段是字符串数组,这些是添加到数据中的标记。 用户可以通过在前端选择和取消选择这些标签来过滤数据,所以我正在做一个数组来查询Firestore。 然后,我在最佳匹配上对结果进行评分,因此匹配更多标签的文档被排序到顶部,并显示到页面顶部供用户使用。 我现在正试图用带有文档快照的startAfter作为光标和限制,对这些数据进行分页。但我需要确保,当限
问题内容: 我现在正在使用C#,并且正在使用JSON.Net将JSON字符串解析为C#对象。我的问题的一部分是我得到了一些像这样的字符串: 当我尝试使用进行反序列化时,它将引发异常。 我想知道将这个较大的字符串拆分为较小的json字符串的最佳方法是什么。 我正在考虑遍历字符串并匹配“级别0”的花括号。这似乎是个好主意吗?还是有更好的方法来做到这一点? 问题答案: 您可以将标志设置为true来使用a