如何使用 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+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始
广告