gpt4 book ai didi

java - 对对象集合进行排序

转载 作者:IT老高 更新时间:2023-10-28 20:22:39 25 4
gpt4 key购买 nike

如果我有一个简单的字符串列表:

List<String> stringList = new ArrayList<String>();

我可以使用:

Collections.sort(stringList);

但假设我有一个 Person 类:

public class Person
{
private String name;
private Integer age;
private String country;
}

还有一个列表:

List<Person> personList = new ArrayList<Person>();

我有时想按名称、有时按年龄、有时按国家/地区对其进行排序。

最简单的方法是什么?

我知道我可以实现 Comparable 接口(interface),但这似乎限制了我按一个特定属性对其进行排序。

最佳答案

Collections.sort 可以使用自定义比较器调用。并且可以实现该比较器以允许以不同的排序顺序进行排序。这是一个示例(对于您的 Person 模型 - 年龄为整数):

public class FlexiblePersonComparator implements Comparator<Person> {
public enum Order {Name, Age, Country}

private Order sortingBy = Name;

@Override
public int compare(Person person1, Person person2) {
switch(sortingBy) {
case Name: return person1.name.compareTo(person2.name);
case Age: return person1.age.compareTo(person2.age);
case Country: return person1.country.compareTo(person2.country);
}
throw new RuntimeException("Practically unreachable code, can't be thrown");
}

public void setSortingBy(Order sortBy) {
this.sortingBy = sortingBy;
}
}

然后你就这样使用它(假设 people 是一个字段):

public void sortPersonsBy(FlexiblePersonComparator.Order sortingBy) {
List<Person> persons = this.persons; // useless line, just for clarification
FlexiblePersonComparator comparator = new FlexiblePersonComparator();
comparator.setSortingBy(sortingBy);
Collections.sort(persons, comparator); // now we have a sorted list
}

关于java - 对对象集合进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1206073/

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