Java排序对象集合

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

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接口,但这似乎限制了我只能通过一个特定的属性对其进行排序。

回答:

可以使用自定义比较器调用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;

}

}

你可以这样使用它(假设人员是一个字段):

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排序对象集合 的全部内容, 来源链接: utcz.com/qa/405214.html

回到顶部