首頁 >Java >java教程 >如何使用比較器對 Java 中的自訂物件清單進行正確排序?

如何使用比較器對 Java 中的自訂物件清單進行正確排序?

DDD
DDD原創
2024-12-25 06:16:09546瀏覽

How Can I Correctly Sort a List of Custom Objects in Java Using Comparators?

在Java 中使用比較器對物件進行排序

理解比較器

在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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn