在contacts类(实现actionListener)中,我有一个包含对象(文件中的元素)的JList。有排序按钮,每个按钮都有一个actionListener
按姓氏
按姓氏
按城市
排序由对象元素完成。
用户应提供联系人的姓名和城市名称。怎么做排序??
将这些放入列表中我使用了这段代码:
Map<String, contacts> ma = readFromFile();
for (Map.Entry<String, contacts> entry : ma.entrySet()) {
contacts c = (contacts) entry.getValue();
d.addElement(c.getLastName() + "" + c.getFirstName() + "" + c.getCity());
}
如何进行排序?请帮忙
答案 0 :(得分:1)
而不是JList<String>
,请创建JList<contacts>
实现类ContactsRenderer扩展JLabel实现ListCellRenderer。 有关详细信息,请参阅java doc:http://docs.oracle.com/javase/7/docs/api/javax/swing/JList.html
实施自定义列表数据模型:
public class ContactsModel extends AbstractListModel<contacts>() {
private final List<contacts> backingList = ArrayList<contacts>;
public ContactsModel(Map<String, contacts> ma) {
//populate backing list here from your map
}
public int getSize() {
return backingList.size();
}
public contacts getElementAt(int index) {
return backingList.get(index);
}
};
为模型添加排序方法:
public void sort(Comparator<contacts> comparator) {
Collections.sort(backingList, comparator);
fireContentsChanged(this, 0, backingList.size());
}
为每个用例实现比较器:
public class LastNameAscendingComparator implements Comparator<contacts> {
@Override
public int compare(contacts c1, contacts c2){
return c1.getLastName().compareTo(c2.getLastName());
}
}
最后使用相应的比较器
调用model.sort()答案 1 :(得分:0)
在java中,您可以对列表进行排序:
Collections.sort(yourListOfContacts, new Comparator<Contacts>(){
@Override
public int compare(Contacts obj1, Contacts obj2){
obj1.getFirstName().compareTo(obj2.getFirstName());
}
});
请注意,compare函数的返回类型是整数。这个整数告诉排序算法两者中的哪一个应该首先出现。请注意,-1
表示第一个元素是&#34; less&#34;比第二个,0
表示它们是相同的,而1
表示第一个元素是&#34;更大&#34;比第二个。因此,要颠倒顺序,您可以使用:obj2.getFirstName().compareTo(obj1.getFirstName());
或者,您可以乘以-1
。
您要排序的其他字段将遵循相同的模式,这只是一个示例。
答案 2 :(得分:0)
在Java8中,您可以按如下方式对列表进行排序:
Collections.sort(contactList, (contact1, contact2)
-> contact1.getName().compareTo(contact2.getName()));