Rumah > Java > javaTutorial > Bagaimanakah Saya Boleh Membandingkan Objek Java Berdasarkan Pelbagai Medan?

Bagaimanakah Saya Boleh Membandingkan Objek Java Berdasarkan Pelbagai Medan?

Linda Hamilton
Lepaskan: 2024-12-21 03:26:10
asal
472 orang telah melayarinya

How Can I Compare Java Objects Based on Multiple Fields?

Membandingkan Objek dengan Pelbagai Medan

Dalam pengaturcaraan berorientasikan objek, selalunya wajar untuk membandingkan objek berdasarkan pelbagai medannya. Walau bagaimanapun, antara muka Sebanding hanya membenarkan perbandingan dengan satu medan.

Masalahnya

Pertimbangkan kelas Orang dengan medan FirstName, LastName dan umur. Kami memerlukan cara untuk membandingkan objek ini dengan berbilang medan tanpa menambah kaedah atau overhed yang berlebihan.

Penyelesaian Java 8

Java 8 memperkenalkan ungkapan lambda dan rujukan kaedah, yang menjadikan mudah untuk membuat pembanding tersuai:

Comparator<Person> comparator = Comparator.comparing((Person p) -> p.firstName)
    .thenComparing(p -> p.lastName)
    .thenComparingInt(p -> p.age);
Salin selepas log masuk

Pembanding ini mula-mula membandingkan firstName, kemudian Nama akhir, dan akhirnya umur.

Sintaks Alternatif

Jika kelas Orang mempunyai kaedah pengakses untuk medannya, kita boleh menggunakan rujukan kaedah untuk memudahkan pembanding:

Comparator<Person> comparator = Comparator.comparing(Person::getFirstName)
    .thenComparing(Person::getLastName)
    .thenComparingInt(Person::getAge);
Salin selepas log masuk

Menggunakan Pembanding

Setelah komparator dibuat, kita boleh menggunakannya seperti berikut:

  • Untuk mengisih koleksi objek Orang:

    List<Person> persons = ...;
    Collections.sort(persons, comparator);
    Salin selepas log masuk
  • Untuk membandingkan dua Orang objek:

    Person p1 = ...;
    Person p2 = ...;
    int result = comparator.compare(p1, p2);
    Salin selepas log masuk

Melaksanakan Sebanding

Jika kelas perlu dibandingkan secara langsung (mis., untuk digunakan dalam struktur data yang diisih), ia boleh melaksanakan antara muka Setanding dengan kaedah berikut:

@Override
public int compareTo(Person o) {
    int result = Comparator.comparing(Person::getFirstName)
        .thenComparing(Person::getLastName)
        .thenComparingInt(Person::getAge)
        .compare(this, o);
    return result;
}
Salin selepas log masuk

Pendekatan ini memudahkan objek perbandingan dan mengurangkan keperluan untuk berbilang kaedah perbandingan khusus.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Membandingkan Objek Java Berdasarkan Pelbagai Medan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan