按对象字段之一对对象列表进行排序
sort List of Object by one of Object's field
我知道 Collections.sort(list)
可以处理字符串列表,但是对象列表呢?假设我有这个对象 Contact
:
public class Contact implements Serializable {
private SerializableBitmap picture;
private String name;
private String location;
public Contact() {
}
public void setPicture(SerializableBitmap picture) {
this.picture = picture;
}
public void setName(String name) {
this.name = name;
}
public void setLocation(String location) {
this.location = location;
}
public SerializableBitmap getPicture() {
return picture;
}
public String getName() {
return name;
}
public String getLocation() {
return location;
}
}
然后我有一个这个对象的ArrayList。是否可以根据联系人姓名对列表进行排序?我正在尝试用 ListView 填充它,但它应该按升序排列。
如果您正在填充一个列表,您应该只用一个字符串[]填充它,然后按姓名查找联系人以取回联系人对象。然后您可以对列表视图的字符串 [] 进行排序。
如评论中所示,您无论如何都需要创建一个新的对象字符串数组。这完全取决于您想要采用哪种方式。
您需要像下面这样实现自定义比较器
public class ContactComparator implements Comparator<Contact> {
public int compare(Contact contact1, Contact contact2) {
//In the following line you set the criterion,
//which is the name of Contact in my example scenario
return contact1.getName().compareTo(contact2.getName());
}
}
那么您只需像这样调用它(在您的代码中需要对联系人进行排序的任何地方):
Collections.sort(myContacts, new ContactComparator());
myContacts 是您需要排序的联系人对象列表(您在问题中将其命名为列表)。
我知道 Collections.sort(list)
可以处理字符串列表,但是对象列表呢?假设我有这个对象 Contact
:
public class Contact implements Serializable {
private SerializableBitmap picture;
private String name;
private String location;
public Contact() {
}
public void setPicture(SerializableBitmap picture) {
this.picture = picture;
}
public void setName(String name) {
this.name = name;
}
public void setLocation(String location) {
this.location = location;
}
public SerializableBitmap getPicture() {
return picture;
}
public String getName() {
return name;
}
public String getLocation() {
return location;
}
}
然后我有一个这个对象的ArrayList。是否可以根据联系人姓名对列表进行排序?我正在尝试用 ListView 填充它,但它应该按升序排列。
如果您正在填充一个列表,您应该只用一个字符串[]填充它,然后按姓名查找联系人以取回联系人对象。然后您可以对列表视图的字符串 [] 进行排序。
如评论中所示,您无论如何都需要创建一个新的对象字符串数组。这完全取决于您想要采用哪种方式。
您需要像下面这样实现自定义比较器
public class ContactComparator implements Comparator<Contact> {
public int compare(Contact contact1, Contact contact2) {
//In the following line you set the criterion,
//which is the name of Contact in my example scenario
return contact1.getName().compareTo(contact2.getName());
}
}
那么您只需像这样调用它(在您的代码中需要对联系人进行排序的任何地方):
Collections.sort(myContacts, new ContactComparator());
myContacts 是您需要排序的联系人对象列表(您在问题中将其命名为列表)。