【发布时间】:2022-01-13 21:32:29
【问题描述】:
我有一个 Person 字段,包括 score(int)、name(String) 和 country(String)
1, Jane , Spain
2, James, Italy
1, John , Italy
2, Peter , England
3, Thomas , England
3, Martin , England
现在我提供另一个代表国家名称的字符串列表:[Italy, Spain, Norway, England, Germany]
我的要求是首先根据分数对人员列表进行排序,如果他们具有相同的分数然后按照国家名称列表中提供的国家名称进行排序。如果国家/地区名称也匹配,则按人名排序。
所以最后应该按这个顺序返回 person 对象:
1, John, Italy
1, Jane, Spain
2, James, Italy
2, Peter, England
3, Martin, England
3, Thomas, England
这是我正在尝试的代码:
public static List<Person> sortRecords(List<Person> people, List<String> countries) {
people.sort((p1, p2) -> {
int compare = p1.getScore() - p2.getScore();
if(compare == 0) {
compare = // how to compare by country names based on provided List<String> countries
if(compare == 0) {
compare = p1.getName().compareTo(p2.getName());
}
}
return compare;
});
}
我一直在按国家/地区名称进行比较。
【问题讨论】:
-
反对票有什么理由吗?
-
那么,每个
Person都有一个国家,并且您有一个单独的国家列表(我认为这是“首选”顺序,而不是按字母顺序)?从列表中获取每个国家的索引并进行比较 -
不是反对者,但minimal reproducible example 会帮助我们理解问题
-
countries.indexOf(p1.getCountry) - countries.indexOf(p2.getCountry) -
可能是因为标题和正文并不完全清楚。乍一看,您的问题与懒得搜索 Stack Overflow 的作者发布的非常常见的“如何对我的列表进行排序”问题重复。我编辑了标题以使其更加清晰和具体。