gpt4 book ai didi

java - 用对象对列表进行排序?

转载 作者:行者123 更新时间:2023-12-01 12:02:30 24 4
gpt4 key购买 nike

在联系人类(实现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());
}

如何排序?请帮忙

最佳答案

而不是 JList<String> ,创建一个JList<contacts>

实现类 ContactsRenderer 扩展 JLabel 实现 ListCellRenderer。有关更多详细信息,请参阅 java 文档: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()

关于java - 用对象对列表进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27893050/

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