Kaedah Stream.distinct() dalam Java digunakan untuk menapis unsur pendua daripada strim, memastikan strim yang terhasil hanya mengandungi unsur unik. Ia berfungsi berdasarkan kaedah equals() bagi objek dalam strim.
Kaedah ini adalah sebahagian daripada Java Stream API yang diperkenalkan dalam Java 8 dan biasanya digunakan untuk mengendalikan koleksi atau tatasusunan dengan nilai pendua.
Contoh 1: Mengalih keluar Pendua daripada Senarai Rentetan
Bayangkan anda mempunyai senarai nama, dan beberapa nama diulang. Anda mahukan senarai nama unik.
import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // List of names with duplicates List<String> names = List.of("Alice", "Bob", "Alice", "Charlie", "Bob", "David"); // Use Stream.distinct() to remove duplicates List<String> uniqueNames = names.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueNames); // Output: [Alice, Bob, Charlie, David] } }
Cara ia berfungsi:
Kaedah distinct() membandingkan setiap nama dan hanya menyimpan kejadian pertama pendua.
Contoh 2: Mengalih keluar Pendua daripada Senarai Nombor
Mari kita ambil senarai nombor yang wujud pendua dan keluarkan nombor unik sahaja.
import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // List of numbers with duplicates List<Integer> numbers = List.of(1, 2, 3, 2, 4, 3, 5); // Use Stream.distinct() to remove duplicates List<Integer> uniqueNumbers = numbers.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueNumbers); // Output: [1, 2, 3, 4, 5] } }
Cara ia berfungsi:
Nombor tersebut dibandingkan menggunakan kesamaan semula jadinya (berdasarkan equals() untuk Integer), jadi pendua ditapis keluar.
Contoh 3: Bekerja dengan Objek Mudah
Mari buat Produk kelas dan alih keluar pendua berdasarkan id produk.
Kod:
import java.util.List; import java.util.Objects; import java.util.stream.Collectors; class Product { private int id; private String name; public Product(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; } public String getName() { return name; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Product product = (Product) o; return id == product.id; } @Override public int hashCode() { return Objects.hash(id); } @Override public String toString() { return "Product{id=" + id + ", name='" + name + "'}"; } } public class Main { public static void main(String[] args) { // List of products with duplicates (based on id) List<Product> products = List.of( new Product(1, "Laptop"), new Product(2, "Tablet"), new Product(1, "Laptop"), // Duplicate new Product(3, "Smartphone"), new Product(2, "Tablet") // Duplicate ); // Use Stream.distinct() to remove duplicates List<Product> uniqueProducts = products.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueProducts); // Output: // [Product{id=1, name='Laptop'}, Product{id=2, name='Tablet'}, Product{id=3, name='Smartphone'}] } }
Penjelasan:
Semakan Kesamaan: Kaedah equals() ditindih untuk memastikan objek Produk dianggap sama berdasarkan idnya.
Penyingkiran Pendua: Apabila distinct() menemui dua produk dengan id yang sama, ia hanya menyimpan yang pertama.
Output: Anda mendapat senarai produk unik.
Pemahaman Ringkas
distinct() mengalih keluar pendua dengan membandingkan nilai secara terus.
Contoh: [1, 2, 2, 3] menjadi [1, 2, 3].
Anda perlu melaksanakan kaedah equals() dan hashCode() untuk kelas.
distinct() menggunakan kaedah ini untuk menentukan sama ada dua objek adalah pendua.
Kes Penggunaan: Menapis Nama Pendua daripada Input Pengguna
Bayangkan pengguna memasukkan nama berulang kali dalam borang dan anda mahu memastikan hanya nama unik disimpan.
import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; public class Main { public static void main(String[] args) { // Simulate user input List<String> userInput = new ArrayList<>(); userInput.add("John"); userInput.add("Mary"); userInput.add("John"); // Duplicate userInput.add("Alice"); // Remove duplicates List<String> uniqueInput = userInput.stream() .distinct() .collect(Collectors.toList()); System.out.println(uniqueInput); // Output: [John, Mary, Alice] } }
Ini memastikan bahawa aplikasi hanya menyimpan nama unik tanpa memerlukan semakan manual untuk pendua.
Pengambilan Akhir:
distinct() adalah mudah: ia mengalih keluar pendua daripada strim.
Untuk jenis primitif atau tidak boleh ubah: Hanya gunakan terus.
Untuk objek tersuai: Pastikan pelaksanaan equals() dan hashCode() yang betul.
Petua Praktikal: Gunakannya untuk membersihkan data pendua dalam sebarang bentuk (cth., senarai, input pengguna, hasil pangkalan data).
Atas ialah kandungan terperinci Java Stream.distinct(). Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!