如何使用 Java 8 從 ArrayList 中獲取唯一值?


透過利用 Java 8 的函數語言程式設計特性,例如 Stream API、流和 Lambda 表示式,從 ArrayList 中提取唯一值變得更加簡單和快速。利用這些功能,您可以提取不同的元素,而無需進行繁瑣的迭代或手動檢查;Lambda 表示式允許編寫簡潔易讀的程式碼,這使得這項任務更加簡單。無論是在處理大型資料集還是簡單地消除重複項,Java 8 都提供了強大而優雅的解決方案,用於從 ArrayList 中檢索唯一值。

ArrayList

Java 的 ArrayList 類實現了 List 介面,為在可調整陣列中儲存和操作元素集合提供了類似動態陣列的功能。當向 ArrayList 的陣列中新增或刪除元素時,其大小會自動調整,提供靈活性和便利性。

ArrayList 中存在多種方法來訪問、修改、新增和刪除元素。可以使用 get() 訪問元素,並使用 set() 修改元素;此外,可以使用 add 在特定位置或列表末尾新增元素,或使用 remove 在特定位置刪除元素。

ArrayList<String> names = new ArrayList<>();

方法

Java 8 提供了幾種方法來查詢 ArrayList 中的唯一值。下面是兩種常用的策略。

  • 使用 Stream 和 distinct()

  • 使用 HashSet

這兩種方法都提供了一種有效的方法,可以使用 Java 8 功能從 ArrayList 中提取唯一值,因此只需選擇最符合您的需求和編碼風格的一種即可。

使用 Stream 和 distinct()

首先,透過呼叫其 stream() 方法將 ArrayList 轉換為流;然後在該流上使用 distinct() 過濾掉重複值,以便只保留唯一項。要從流中提取唯一值,可以使用帶有適當收集器的 collect() 方法來檢索它們。

為了最佳化 distinct() 的使用,請確保 ArrayList 中的元素已正確重寫了 equals(),以便建立其唯一性並將其正確定義為不同的元素。

演算法

  • 建立並使用元素填充 ArrayList。

  • 使用 stream() 方法將 ArrayList 轉換為流。

  • 在 Stream 上應用 distinct() 方法以消除重複值並僅保留唯一值。

  • 使用 collect() 方法和合適的收集器將流轉換回 ArrayList 或其他合適的集合。

  • 這個新的 ArrayList 將只包含來自其源 ArrayList 的唯一值。

程式

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class UniqueValuesExample {
   public static void main(String[] args) {
      List<String> fruits = new ArrayList<>();
      fruits.add("Apple");
      fruits.add("Orange");
      fruits.add("Banana");
      fruits.add("Orange");
      fruits.add("Mango");
      fruits.add("Apple");

      List<String> uniqueFruits = fruits.stream()
         .distinct()
         .collect(Collectors.toList());

      System.out.println("Unique fruits: " + uniqueFruits);
   }
}

輸出

Unique fruits: [Apple, Orange, Banana, Mango]

使用 HashSet

啟動一個編輯器。將 HashSet 物件作為包含唯一元素的集合進行組裝,然後逐個遍歷 ArrayList 中的每個元素,將每個元素新增到 HashSet 中,並注意出現的任何重複值。由於 HashSet 不允許重複值保留,因此來自 ArrayList 的任何重複資料將自動被 HashSet 刪除。

遍歷 ArrayList 後,使用僅包含來自該原始列表的唯一值的 HashSet,您可以直接訪問這些特定值或將其轉換回 ArrayList 以進行進一步訪問。

這種方法利用了 HashSet 固有的唯一性約束來快速從 ArrayList 中檢索唯一值,在 Java 8 中提供了一個便捷的解決方案。

演算法

  • 建立並使用元素填充 ArrayList。

  • 建立一個 HashSet 物件。

  • 遍歷 ArrayList 中的每個元素。

  • 使用 add() 方法將每個元素新增到 HashSet 中。

    • HashSet 會自動消除重複值,因為它只儲存唯一值。

  • 遍歷 ArrayList 後,HashSet 將僅包含來自該原始列表的唯一值。

  • 如果需要,可以將 HashSet 轉換回 ArrayList 或直接將其用作查詢其中唯一值的訪問工具。

程式

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

public class UniqueValuesExample {
   public static void main(String[] args) {
      List<String> animals = new ArrayList<>();
      animals.add("Lion");
      animals.add("Elephant");
      animals.add("Tiger");
      animals.add("Elephant");
      animals.add("Giraffe");
      animals.add("Lion");

      Set<String> uniqueAnimals = new HashSet<>(animals);

      System.out.println("Unique animals: " + uniqueAnimals);
   }
}

輸出

Unique animals: [Elephant, Lion, Tiger, Giraffe]

結論

在本教程中,我們瞭解了 Java 8 如何為從 ArrayList 中提取唯一值提供高效且優雅的解決方案。透過利用其 Stream API 的 distinct() 方法並快速從 ArrayList 中消除重複項以獲取新的唯一項,以及其函數語言程式設計特性,這些特性使程式碼簡潔易讀,開發人員可以輕鬆快速有效地完成此任務。

HashSet 還可以提供另一種有效的方法來查詢唯一值,方法是用 ArrayList 初始化它;任何重複元素將自動被消除,只留下其中的唯一條目。

從這些方法可以看出,Java 8 在處理從 ArrayList 中提取唯一值的任務方面具有靈活性和便利性;這兩種方法都利用其 Stream API 或 HashSet 實現來實現最大生產力,以幫助開發人員輕鬆實現其目標。

更新於:2023-07-25

17K+ 瀏覽量

啟動您的 職業生涯

透過完成課程獲得認證

開始
廣告