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);
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);
Menggunakan Pembanding
Setelah komparator dibuat, kita boleh menggunakannya seperti berikut:
Untuk mengisih koleksi objek Orang:
List<Person> persons = ...; Collections.sort(persons, comparator);
Untuk membandingkan dua Orang objek:
Person p1 = ...; Person p2 = ...; int result = comparator.compare(p1, p2);
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; }
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!