在 Java 開發中,經常需要對 ArrayList 中的自訂物件進行排序。本文將透過完整的程式碼範例,示範如何根據物件的 int 型別與 String 型別屬性進行排序,並提供多種實作方式供參考。
首先建立一個簡單的 Student 類別,包含年齡、姓名與體重三個屬性:
public class Student {
private int age;
private String name;
private String weight;
public String getWeight() { return weight; }
public void setWeight(String weight) { this.weight = weight; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
使用 Collections.sort() 搭配自訂 Comparator 實現依年齡升冪排序:
@SuppressWarnings("unchecked")
public static void sortIntMethod(List list) {
Collections.sort(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Student stu1 = (Student) o1;
Student stu2 = (Student) o2;
if (stu1.getAge() > stu2.getAge()) return 1;
else if (stu1.getAge() == stu2.getAge()) return 0;
else return -1;
}
});
printList(list);
}
@SuppressWarnings("unchecked")
public static void sortStringMethod(List list) {
Collections.sort(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
Student stu1 = (Student) o1;
Student stu2 = (Student) o2;
return stu1.getName().compareTo(stu2.getName());
}
});
printList(list);
}
若需依中文拼音或筆畫排序,可使用 java.text.RuleBasedCollator:
@SuppressWarnings("unchecked")
public static void sortByRuleBasedCollator(List list) {
Collections.sort(list, new Comparator() {
@Override
public int compare(Object o1, Object o2) {
return ((RuleBasedCollator) Collator.getInstance(Locale.CHINA))
.compare(((Student) o1).getName(), ((Student) o2).getName());
}
});
printList(list);
}
@SuppressWarnings("unchecked")
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add(new Student(35, "wanglei"));
list.add(new Student(4, "lisi"));
list.add(new Student(56, "zhonghua"));
list.add(new Student(39, "waanglei"));
System.out.println("排序前:");
printList(list);
sortIntMethod(list); // 依年齡排序
sortStringMethod(list); // 依姓名排序
}
private static void printList(List list) {
for (int i = 0; i < list.size(); i++) {
Student st = (Student) list.get(i);
System.out.println("age=" + st.getAge() + ", name=" + st.getName());
}
}
RuleBasedCollator 可獲得符合中文習慣的排序結果本文展示了三種常見的 List 排序方式,開發者可根據資料型別與業務需求選擇適當方案。實務上建議搭配泛型使用(如 List<Student>)以提升型別安全性。