首頁 > Java > java教程 > 主體

如何在Java中尋找流中的重複元素

PHPz
發布: 2023-09-06 15:57:10
轉載
1427 人瀏覽過

如何在Java中尋找流中的重複元素

在資料流中尋找重複元素是 Java 面試甚至許多學生考試中常見的問題之一。 Java提供了多種尋找重複元素的方法,我們主要關注兩種方法:第一種是使用Java Collection Framework的Set,另一種是使用流的內建方法Collections.Frequency()。

Java 程式尋找流程中的重複元素

在討論從資料集合中取得重複項的不同方法之前,有必要先討論一下filter()方法。它將是範例程式的重要組成部分。

過濾器()

它允許我們根據指定的條件對流的元素進行過濾。它是高階函數的一部分,用於對流項應用某種行為。此方法將謂詞作為參數並傳回與謂詞相符的元素清單。

文法

                
filter(predicate);
登入後複製

Java集合框架的使用

它是Java Collection Interface的子接口,不允許重複值。它與數學集合非常相似。我們可以使用 add() 方法,該方法僅將那些不相似的元素新增至集合。要使用Set介面的屬性,我們需要使用實作該介面的HashSet類別。

範例

以下範例說明如何使用 Set 介面從流中尋找重複元素。

方法

  • 使用 Arrays.asList() 方法建立一個清單來儲存固定大小的清單。

  • 然後,使用 HashSet 類別定義一個 Set,以只儲存不相似的元素。

  • 現在,使用filter()方法以及stream()和forEach()來只過濾掉重複的項目。這裡,stream()以流的形式指定輸入,我們將使用forEach()來迭代並列印重複的元素。

#
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
登入後複製

使用 Collections.Frequency() 方法

從流或集合中過濾重複元素的另一種最簡單方法是使用「java.util」套件的 Collections.Frequency() 方法,該方法用於傳回指定集合中的元素總數。

語法

Collections.frequency(nameOfCollection, obj);
登入後複製

在這裡,

nameOfCollection表示流,obj表示需要確定頻率的元素。

範例

在下面的範例中,我們將使用 Collections.Frequency() 方法來統計流中每個元素的出現次數,然後傳回出現次數超過一次的元素。我們將列印重複元素出現的整個清單以及計數。

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
登入後複製

範例

這是另一個範例,我們將同時使用 Set Interface 和 Collections.Frequency() 方法來只取得重複元素。 Collections.Frequency() 方法將對流中每個元素的出現次數進行計數,然後將計數大於 1 的元素收集到 Set 中以刪除重複項。產生的 Set 將只包含流中的重複元素。

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]
登入後複製

結論

在本節中,我們將以上述範例和概念中的一些要點來結束我們的討論。我們可以使用filter()方法從資料集合中過濾掉特定類型的元素。它透過對每個元素應用謂詞來在背景工作。 Set Interface 能夠僅儲存不同的元素,這使其成為給定任務的絕佳選擇。

以上是如何在Java中尋找流中的重複元素的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:tutorialspoint.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!