我想知道是否有一种方法可以对自定义对象的 Arraylist 进行排序以适应下面解释的情况?我假设我必须编写一个自定义比较器。
假设我有一个如下所示的对象类:
public class Person {
private String status; //options: Online, Away, Offline
private String name; //Person's name
private Date date; //Last signed on
//basic constructor
public Person() {
//set default values
}
//constructor to set all variables
public Person(String s, String n, Date d) {
status = s;
name = n;
date = d;
}
//setters & getters for each of the fields
}
根据姓名和日期排序应该相当容易。但是,我想知道如何根据状态进行排序?我希望能够根据此人当前是否在线 以及谁离线 对我的数组进行排序。我不太关心谁不在。
上面的类只是一个示例类。我的实际类(class)有一个 JLabel,它根据状态设置了一个图标。 setText()
保持未使用状态。我想到了将标签设置为值 0、1 和 2 并仅使用典型的整数比较器的可能性,但我不确定这是否是一种建议的做法。
当然,我在这里缺少一个明显的解决方案,所以也许评论或链接可以提供必要的信息。我知道这里有大量的“排序数组列表”线程,我浏览了很多。他们中的大多数只是按字母顺序对字符串或整数进行排序。
最佳答案
如果我理解正确的话,你基本上想要对 2 个字段进行排序 - 主要字段是状态(因此具有相同状态的人聚集在一起)然后,在每个具有相同状态的人组中,按名称排序。
执行此操作的比较器如下所示:
public class CompositePersonComparator implements Comparator<Person> {
@Override
public int compare(Person a, Person b) {
//1st and foremost - see if they are not of the same status.
int statusComparison = a.getStatus().compareTo(b.getStatus());
if (statusComparison!=0) return statusComparison;
//logical else - same status, sort by name
return a.getName().compareTo(b.getName());
}
}
关于java - 有没有一种简单的方法可以以这种方式对数组列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15508884/