gpt4 book ai didi

java - 如何在不同的时间按不同的参数对列表进行排序

转载 作者:IT老高 更新时间:2023-10-28 11:30:33 25 4
gpt4 key购买 nike

我有一个名为 Person 的类(class)具有多个属性,例如:

public class Person {
private int id;
private String name, address;
// Many more properties.
}

很多Person -对象存储在 ArrayList<Person> .我想通过多个排序参数对这个列表进行排序,并且有时会有所不同。例如,我可能有一次想要按 name 排序上升然后address下降,还有一次只是 id下降。

我不想创建自己的排序方法(即,我想使用 Collections.sort(personList, someComparator)。实现此目的的最优雅的解决方案是什么?

最佳答案

我认为您的枚举方法基本上是合理的,但是 switch 语句确实需要一种更加面向对象的方法。考虑:

enum PersonComparator implements Comparator<Person> {
ID_SORT {
public int compare(Person o1, Person o2) {
return Integer.valueOf(o1.getId()).compareTo(o2.getId());
}},
NAME_SORT {
public int compare(Person o1, Person o2) {
return o1.getFullName().compareTo(o2.getFullName());
}};

public static Comparator<Person> decending(final Comparator<Person> other) {
return new Comparator<Person>() {
public int compare(Person o1, Person o2) {
return -1 * other.compare(o1, o2);
}
};
}

public static Comparator<Person> getComparator(final PersonComparator... multipleOptions) {
return new Comparator<Person>() {
public int compare(Person o1, Person o2) {
for (PersonComparator option : multipleOptions) {
int result = option.compare(o1, o2);
if (result != 0) {
return result;
}
}
return 0;
}
};
}
}

使用示例(使用静态导入)。

public static void main(String[] args) {
List<Person> list = null;
Collections.sort(list, decending(getComparator(NAME_SORT, ID_SORT)));
}

关于java - 如何在不同的时间按不同的参数对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1421322/

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