ID (Indonesia) Translation

Java - Cara Menggunakan Comparator?

Halo sana, para ahli Java masa depan! ? Hari ini, kita akan mengemban perjalanan yang menarik ke dunia Java Comparators. Jangan khawatir jika Anda baru belajar programming - saya akan menjadi panduan yang ramah, dan kita akan berjalan langkah demi langkah. Pada akhir panduan ini, Anda akan mampu mengurutkan objek seperti seorang pro!

Java - Comparators

Apa Itu Comparator?

Sebelum kita mendalam, bayangkan Anda sedang mengatur rak bukunya. Anda mungkin ingin mengatur buku-bukunya berdasarkan judul, pengarang, atau tanggal terbit. Dalam Java, Comparator adalah seperti petugas perpustakaan pribadi Anda yang tahu secara tepat bagaimana mengurutkan koleksi Anda berdasarkan kriteria apa pun yang Anda pilih.

Dalam istilah teknis, Comparator adalah sebuah interface di Java yang memungkinkan kita untuk menentukan urutan khusus untuk objek. Ini sangat berguna saat kita ingin mengurutkan objek yang tidak memiliki urutan alami, atau saat kita ingin mengurutkan mereka dalam cara yang berbeda dari urutan alami mereka.

Interface Comparator

mari kita lihat lebih dekat ke interface Comparator:

public interface Comparator<T> {
int compare(T o1, T o2);
}

Jangan ter intimidasi oleh ini! Itu lebih mudah daripada yang Anda pikirkan. <T> hanya mengatakan bahwa interface ini dapat bekerja dengan jenis objek apa pun. Metode compare adalah tempat magis terjadi - itu seperti meminta petugas perpustakaan Anda untuk membandingkan dua buku.

Cara Kerja Metode compare

Metode compare mengambil dua objek dan mengembalikan sebuah integer:

  • Jika objek pertama dianggap "lebih kecil" daripada yang kedua, itu mengembalikan bilangan negatif.
  • Jika mereka dianggap "sama", itu mengembalikan nol.
  • Jika yang pertama "lebih besar", itu mengembalikan bilangan positif.

Pertimbangkan itu seperti suatu skala keseimbangan. Jika objek pertama lebih ringan, skala condong ke sisi negatif. Jika mereka sama, skala tetap keseimbangan di nol. Jika yang pertama lebih berat, skala condong ke sisi positif.

Membuat Comparator Pertama Anda

mari kita buat Comparator sederhana untuk mengurutkan string berdasarkan panjangnya. Kita akan menamakan itu StringLengthComparator:

import java.util.Comparator;

public class StringLengthComparator implements Comparator<String> {
@Override
public int compare(String s1, String s2) {
return s1.length() - s2.length();
}
}

Ini adalah apa yang terjadi:

  1. Kita mengimpor interface Comparator dari java.util.
  2. Kita membuat kelas yang mengimplementasikan Comparator<String>, berarti itu akan membandingkan objek String.
  3. Kita menimpa metode compare untuk mengurangi panjang string kedua dari yang pertama.

Menggunakan Comparator Anda

Sekarang kita memiliki Comparator, mari kita gunakan itu! Kita akan membuat daftar string dan mengurutkannya:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class ComparatorExample {
public static void main(String[] args) {
List<String> buah = new ArrayList<>();
buah.add("Apple");
buah.add("Pear");
buah.add("Banana");
buah.add("Kiwi");

System.out.println("Sebelum pengurutan: " + buah);

Collections.sort(buah, new StringLengthComparator());

System.out.println("Setelah pengurutan: " + buah);
}
}

Output:

Sebelum pengurutan: [Apple, Pear, Banana, Kiwi]
Setelah pengurutan: [Pear, Kiwi, Apple, Banana]

mari kitauraikan ini:

  1. Kita membuat daftar nama buah.
  2. Kita mencetak daftar asli.
  3. Kita menggunakan Collections.sort() dengan Comparator khusus kita untuk mengurutkan daftar.
  4. Kita mencetak daftar yang diurutkan.

Perhatikan bagaimana buah-buahan sekarang diurutkan berdasarkan panjang nama mereka!

Ekspresi Lambda: Jalan Pintas

Java 8 memperkenalkan ekspresi lambda, yang dapat membuat Comparator kita menjadi lebih ringkas. Ini adalah contoh yang sama menggunakan lambda:

Collections.sort(buah, (s1, s2) -> s1.length() - s2.length());

Baris ini melakukan hal yang sama persis dengan kelas StringLengthComparator kita! Itu seperti mengatakan ke Java, "Hey, saat Anda membandingkan dua string, hanya hitung perbedaan panjang mereka."

Mengurutkan Objek Khusus

Sekarang, mari kita naik tingkat dan mengurutkan beberapa objek khusus. Bayangkan kita memiliki kelas Person:

public class Person {
private String name;
private int age;

public Person(String name, int age) {
this.name = name;
this.age = age;
}

// Getters dan setters...

@Override
public String toString() {
return name + " (" + age + ")";
}
}

Kita dapat membuat Comparator untuk mengurutkan objek Person berdasarkan umur:

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class PersonSortExample {
public static void main(String[] args) {
List<Person> orang = new ArrayList<>();
orang.add(new Person("Alice", 25));
orang.add(new Person("Bob", 30));
orang.add(new Person("Charlie", 22));

System.out.println("Sebelum pengurutan: " + orang);

Collections.sort(orang, Comparator.comparingInt(Person::getAge));

System.out.println("Setelah pengurutan: " + orang);
}
}

Output:

Sebelum pengurutan: [Alice (25), Bob (30), Charlie (22)]
Setelah pengurutan: [Charlie (22), Alice (25), Bob (30)]

Di sini, kita menggunakan Comparator.comparingInt(), yang membuat Comparator berdasarkan nilai integer - dalam hal ini, umur. Person::getAge adalah referensi metode, mengatakan ke Java untuk menggunakan metode getAge() untuk mendapatkan nilai yang akan dibandingkan.

Mengurutkan Berdasarkan Urutan Terbalik

Apa bila kita ingin mengurutkan secara berurutan turun? Mudah-mudahan! Hanya gunakan metode reversed():

Collections.sort(orang, Comparator.comparingInt(Person::getAge).reversed());

Ini akan mengurutkan objek Person dari yang tua ke yang muda.

Menggabungkan Comparators

Kadang-kadang, kita mungkin ingin mengurutkan berdasarkan beberapa kriteria. Misalnya, mari kita urutkan Person berdasarkan umur, dan jika umur sama, maka berdasarkan nama:

Comparator<Person> umurDanNamaComparator = Comparator
.comparingInt(Person::getAge)
.thenComparing(Person::getName);

Collections.sort(orang, umurDanNamaComparator);

Ini membuat Comparator yang pertama kali mengurutkan berdasarkan umur, dan jika umur sama, maka mengurutkan berdasarkan nama.

Kesimpulan

Selamat! Anda baru saja belajar tentang hal-hal dalam dan luas tentang Java Comparators. Dari mengurutkan string sederhana hingga objek kompleks, Anda sekarang memiliki kekuatan untuk mengatur data dalam cara apa pun yang Anda pilih. Ingat, latihan membuat ahli, jadi jangan takut untuk mencoba kriteria pengurutan yang berbeda dan objek.

Saat Anda terus menjalani perjalanan Java Anda, Anda akan menemukan Comparators menjadi alat yang tak ternilai di dalam peralatan pemrograman Anda. Mereka tidak hanya untuk pengurutan daftar - mereka digunakan dalam banyak koleksi dan algoritma Java untuk menjaga urutan dan melakukan pencarian yang efisien.

Terus kode, terus belajar, dan terutama, bersenang-senang! Siapa tahu, mungkin suatu hari Anda akan menulis algoritma pengurutan yang mengubah cara kita mengatur data. Sampai saat itu, selamat belajar! ??‍??‍?

Metode Metode Comparator Interface

Berikut adalah tabel metode kunci dalam interface Comparator:

Metode Deskripsi
compare(T o1, T o2) Mengurutkan dua argumen untuk urutan.
equals(Object obj) Menunjukkan apakah objek lain "sama" dengan comparator ini.
reversed() Mengembalikan comparator yang menerapkan urutan terbalik comparator ini.
thenComparing(Comparator<? super T> other) Mengembalikan comparator leksikografik dengan comparator lain.
thenComparingInt(ToIntFunction<? super T> keyExtractor) Mengembalikan comparator leksikografik dengan fungsi yang mengekstrak kunci pengurutan integer.
thenComparingLong(ToLongFunction<? super T> keyExtractor) Mengembalikan comparator leksikografik dengan fungsi yang mengekstrak kunci pengurutan long.
thenComparingDouble(ToDoubleFunction<? super T> keyExtractor) Mengembalikan comparator leksikografik dengan fungsi yang mengekstrak kunci pengurutan double.

Metode ini menyediakan alat yang kuat untuk membuat logika pengurutan kompleks, memungkinkan Anda untuk membuat comparator yang rumit untuk jenis data apa pun atau kriteria pengurutan apa pun.

Credits: Image by storyset