如何使用 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 不允许保留重复值,因此 HashSet 将自动消除 ArrayList 中的任何重复数据。
在遍历 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 实现来最大限度地提高生产力,帮助开发人员轻松实现其目标。