理解比較器
在Java 中,比較器是定義物件應該如何排序的介面進行比較以進行排序。實作比較器可讓您定義偏離 Comparable 介面提供的自然順序的自訂排序行為。
錯誤分析
您的程式碼遇到異常,因為您'正在嘗試對包含 People 物件的 ArrayList 進行排序,而不實作 Comparable 或 Comparator 介面。 People 類別中的比較方法不正確,因為它應該比較 People 類別的實例,而不是 Integer 包裝物件。
解決方案
要解決此問題,您可以實作一個Comparator,根據People 物件的ID 進行比較,如下所示:
import java.util.Comparator; public class PeopleComparator implements Comparator<People> { @Override public int compare(People p1, People p2) { return p1.getId() - p2.getId(); } }
在您的TestPeople 類別中,使用PeopleComparator 對peps清單進行排序:
import java.util.ArrayList; import java.util.Collections; public class TestPeople { public static void main(String[] args) { ArrayList<People> peps = new ArrayList<>(); peps.add(new People(123, "M", 14.25)); // ... Collections.sort(peps, new PeopleComparator()); for (People person : peps) { System.out.println(person); } } }
替代方法
Java 提供了一種使用Comparator 類別實作自訂排序的替代方法,可以直接賦值到排序方法,而不需要單獨的類別。例如:
Collections.sort(peps, new Comparator<People>() { @Override public int compare(People p1, People p2) { return p1.getId() - p2.getId(); } });
此外,您可以使用新的 lambda 表達式語法(Java 8 )來簡化比較器實作:
Collections.sort(peps, (p1, p2) -> p1.getId() - p2.getId());
以上是如何使用比較器對 Java 中的自訂物件清單進行正確排序?的詳細內容。更多資訊請關注PHP中文網其他相關文章!