Rumah  >  Artikel  >  Java  >  Bagaimana untuk mencari elemen pendua dalam aliran di Java

Bagaimana untuk mencari elemen pendua dalam aliran di Java

PHPz
PHPzke hadapan
2023-09-06 15:57:101500semak imbas

Bagaimana untuk mencari elemen pendua dalam aliran di Java

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. .

Atur cara Java untuk mencari elemen pendua dalam 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.

penapis()

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.

Tatabahasa

                
filter(predicate);

Penggunaan rangka kerja koleksi Java

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

Contoh berikut menggambarkan cara menggunakan antara muka Set untuk mencari elemen pendua daripada strim.

Kaedah

  • 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
   }
}

Output

The list of duplicate Items: 
10
40
61

Gunakan kaedah Collections.Frequency().

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.

Tatabahasa

Collections.frequency(nameOfCollection, obj);

di sini,

nameOfCollection mewakili strim dan obj mewakili elemen yang kekerapannya perlu ditentukan.

Contoh

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());
    }
}

Output

The list of duplicate Items with frequency: 
10
10
10
40
40
61
61
Count of duplicate items: 
7

Contoh

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); 
   }
}

Output

The list of duplicate Items:[40, 10, 61]

Kesimpulan

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!

Kenyataan:
Artikel ini dikembalikan pada:tutorialspoint.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam