【发布时间】:2013-03-08 16:21:56
【问题描述】:
我想知道是否有一种方法可以对自定义对象的 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
}
根据姓名和日期进行排序应该相当容易。但是,我想知道如何根据状态进行排序?我希望能够根据此人当前是否在线以及谁离线对我的数组进行排序。我不太关心谁不在。
上面的类只是一个示例类。我的实际班级有一个 JLabel 根据状态设置一个图标。 setText() 仍未使用。我想到了将标签设置为 0、1 和 2 值并仅使用典型整数比较器的可能性,但我不确定这是否是一种建议的方式。
当然我在这里缺少一个明显的解决方案,所以也许评论或链接可以提供必要的信息。我知道这里有大量的“排序数组列表”线程,我浏览了很多。他们中的大多数只是按字母顺序或整数排序字符串。
【问题讨论】:
-
Status 应该是一个枚举。
-
请参阅 javadoc 以了解在编写比较器后如何排序的集合:docs.oracle.com/javase/1.5.0/docs/api/java/util/…
-
@mrhobo 我会读入 Enum。使用枚举,我假设我会给它们值并根据整数值进行排序? Nattyddubbs,我正在阅读链接。
-
这个问题没有意义的是没有“自然”的状态排序,除非你使用
Stringordering whereOnline>Offline>Away。使用Enum,您可以在对象中定义它们的顺序,或者只是将它们放在枚举声明中所需的“顺序”中。 -
@nattyddubbs 哇,我不知道在枚举中将它们按所需顺序自动定义为这样。我显然需要阅读枚举。谢谢你。我为我的无知道歉。
标签: java sorting collections arraylist