Mencari elemen pendua dalam aliran data ialah salah satu soalan biasa dalam temu bual Java dan juga dalam banyak peperiksaan pelajar. Java menyediakan pelbagai kaedah untuk mencari elemen pendua Kami memberi tumpuan terutamanya pada dua kaedah: yang pertama ialah menggunakan Set Rangka Kerja Koleksi Java, dan yang lain adalah menggunakan kaedah terbina dalam Collections.Frequency() strim. .
Sebelum membincangkan kaedah yang berbeza untuk mendapatkan pendua daripada pengumpulan data, adalah perlu untuk membincangkan kaedah penapis(). Ia akan menjadi bahagian penting dalam program sampel.
Ia membolehkan kami menapis unsur-unsur aliran berdasarkan keadaan yang ditetapkan. Ia adalah sebahagian daripada fungsi tertib lebih tinggi yang menggunakan beberapa gelagat pada istilah aliran. Kaedah ini mengambil predikat sebagai parameter dan mengembalikan senarai elemen yang sepadan dengan predikat.
filter(predicate);
Ia ialah sub-antaramuka Antara Muka Koleksi Java dan tidak membenarkan nilai pendua. Ia sangat serupa dengan set matematik. Kita boleh menggunakan kaedah add() yang hanya menambah elemen yang tidak serupa dengan set. Untuk menggunakan sifat antara muka Set, kita perlu menggunakan kelas HashSet yang melaksanakan antara muka ini.
Contoh berikut menggambarkan cara menggunakan antara muka Set untuk mencari elemen pendua daripada strim.
Gunakan kaedah Arrays.asList() untuk mencipta senarai untuk menyimpan senarai saiz tetap.
Kemudian, gunakan kelas HashSet untuk menentukan Set untuk menyimpan elemen yang berbeza sahaja.
Sekarang, gunakan kaedah filter() bersama-sama dengan stream() dan forEach() untuk menapis item pendua sahaja. Di sini, stream() menentukan input dalam bentuk strim dan kami akan menggunakan forEach() untuk mengulang dan mencetak elemen berulang.
import java.util.*; public class Duplicate { public static void main(String []args) { // create a list with duplicate items List<Integer> itemsList = Arrays.asList(10, 12, 10, 33, 40, 40, 61, 61); // declaring a new Set Set<Integer> newitemSet = new HashSet<>(); System.out.println("The list of duplicate Items: "); itemsList.stream() // converting list to stream .filter(nums -> !newitemSet.add(nums)) // to filter out the elementsthat are not added to the set .forEach(System.out::println); // print the duplicates } }
The list of duplicate Items: 10 40 61
Satu lagi cara paling mudah untuk menapis elemen pendua daripada strim atau koleksi ialah menggunakan kaedah Collections.Frequency() bagi pakej "java.util", yang digunakan untuk mengembalikan jumlah bilangan elemen dalam koleksi yang ditentukan.
Collections.frequency(nameOfCollection, obj);
di sini,
nameOfCollection mewakili strim dan obj mewakili elemen yang kekerapannya perlu ditentukan.
Dalam contoh di bawah, kami akan menggunakan kaedah Collections.Frequency() untuk mengira kejadian setiap elemen dalam strim dan kemudian mengembalikan elemen yang muncul lebih daripada sekali. Kami akan mencetak keseluruhan senarai kejadian elemen berulang bersama-sama dengan kiraan.
import java.util.*; public class FindDuplicates { public static void main(String[] args) { // create a list with duplicate items List<Integer> itemslist = Arrays.asList(10, 12, 10, 10, 33, 40, 40, 61, 61); System.out.println("The list of duplicate Items with frequency: "); itemslist.stream() // converting list to stream .filter(itr -> Collections.frequency(itemslist, itr) > 1) // checking the frequency of duplicate items .forEach(System.out::println); // printing the frequency of duplicate items System.out.println("Count of duplicate items: "); // to count the duplicate items System.out.println(itemslist.stream() .filter(itr -> Collections.frequency(itemslist, itr) > 1) .count()); } }
The list of duplicate Items with frequency: 10 10 10 40 40 61 61 Count of duplicate items: 7
Berikut ialah satu lagi contoh di mana kami akan menggunakan kedua-dua Set Interface dan Collections.Frequency() kaedah untuk mendapatkan elemen pendua sahaja. Kaedah Collections.Frequency() akan mengira kejadian setiap elemen dalam strim dan kemudian mengumpulkan elemen dengan kiraan lebih daripada 1 ke dalam Set untuk mengalih keluar pendua. Set yang terhasil hanya akan mengandungi elemen berulang daripada strim.
import java.util.stream.*; import java.util.*; public class FindDuplicates { public static void main(String[] args) { // create a list with duplicate items List<Integer> itemslist = Arrays.asList(10, 12, 10, 10, 33,40, 40, 61, 61); // set to store duplicate items Set<Integer> duplicates = itemslist.stream() .filter(itr -> Collections.frequency(itemslist, itr) > 1) // checking the frequency of duplicate items .collect(Collectors.toSet()); // adding only duplicate items to set // printing the duplicate items System.out.println("The list of duplicate Items:" + duplicates); } }
The list of duplicate Items:[40, 10, 61]
Dalam bahagian ini, kami akan mengakhiri perbincangan kami dengan beberapa perkara penting daripada contoh dan konsep di atas. Kita boleh menggunakan kaedah penapis() untuk menapis jenis elemen tertentu daripada pengumpulan data. Ia berfungsi di belakang tabir dengan menggunakan predikat pada setiap elemen. Keupayaan Tetapkan Antara Muka untuk menyimpan hanya elemen yang berbeza menjadikannya pilihan yang sangat baik untuk tugasan tertentu.
Atas ialah kandungan terperinci Bagaimana untuk mencari elemen pendua dalam aliran di Java. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!