如何使用Java 8 从 ArrayList 获取唯一值?
Java中的 ArrayList 不会阻止列表具有重复值。但是,如果您想从 ArrayList 获取唯一值,则有多种方法,每种方法都通过示例进行了说明。
方法 1(使用 Stream API 的 distinct() 方法):对于Java 8,您可以使用Java 8 Stream API。为了获得不同的值,distinct() 方法是一个中间操作,它也过滤流以传递下一个操作。 Java Stream collect()用于将流元素收集到集合(在本例中为列表)。
句法:
Stream distinct()
返回类型: Stream 是一个接口和函数。它返回一个由不同元素组成的流。
Java
// Java program to demonstrate
// how to Get Unique Values from ArrayList
import java.util.*;
import java.util.stream.Collectors;
public class Main {
public static void main(String[] args)
{
// Create ArrayList of Integers
ArrayList Numbers
= new ArrayList();
// add elements to ArrayList
Numbers.add(1);
Numbers.add(2);
Numbers.add(1);
Numbers.add(4);
Numbers.add(2);
List UniqueNumbers
= Numbers.stream().distinct().collect(
Collectors.toList());
System.out.println("Unique Values of ArrayList");
// iterate through List
for (int i = 0; i < UniqueNumbers.size(); ++i) {
System.out.println(UniqueNumbers.get(i));
}
}
}
Java
// Java program to demonstrate
// how to Get Unique Values from ArrayList
import java.util.ArrayList;
import java.util.HashSet;
public class Main {
public static void main(String[] args)
{
// Create ArrayList of Integer
ArrayList Numbers
= new ArrayList();
// add elements to ArrayList
Numbers.add(1);
Numbers.add(2);
Numbers.add(1);
Numbers.add(4);
Numbers.add(2);
/*Converting List to HashSet using constructor.
*/
HashSet hashSetNumbers
= new HashSet(Numbers);
System.out.println("Unique Values of ArrayList");
// iterate through HashSet
for (Integer strNumber : hashSetNumbers)
System.out.println(strNumber);
}
}
Java
// Maintaining order with no duplicate elements insertion in
// the ArrayList.
import java.util.*;
public class Main {
public static void main(String[] args)
{
// Using LinkedHashSet we can prevent
// insertion of duplicate elements
// as it implements the Set interface
LinkedHashSet UniqueList
= new LinkedHashSet();
// Adding elements to LinkedHashSet
UniqueList.add(1);
UniqueList.add(2);
UniqueList.add(3);
UniqueList.add(3); // duplicate 3 wont be inserted
UniqueList.add(2); // duplicate 2 wont be inserted
// Converting LinkedHashSet to List
List ls
= new ArrayList(UniqueList);
// Printing list
System.out.println(ls);
}
}
输出
Unique Values of ArrayList
1
2
4
方法二(使用HashSet):可以将ArrayList转换为HashSet,不允许重复值。对于转换,请使用接受 Collection 作为参数的 HashSet 类的构造函数。
Java
// Java program to demonstrate
// how to Get Unique Values from ArrayList
import java.util.ArrayList;
import java.util.HashSet;
public class Main {
public static void main(String[] args)
{
// Create ArrayList of Integer
ArrayList Numbers
= new ArrayList();
// add elements to ArrayList
Numbers.add(1);
Numbers.add(2);
Numbers.add(1);
Numbers.add(4);
Numbers.add(2);
/*Converting List to HashSet using constructor.
*/
HashSet hashSetNumbers
= new HashSet(Numbers);
System.out.println("Unique Values of ArrayList");
// iterate through HashSet
for (Integer strNumber : hashSetNumbers)
System.out.println(strNumber);
}
}
输出
Unique Values of ArrayList
1
2
4
保持顺序,在 ArrayList 中没有重复元素的插入。
LinkedHashSet 是 HashSet 的有序版本,它在所有元素之间维护一个双向链表。让我们按照插入的顺序遍历元素。以下是维护插入顺序且不允许重复元素的代码。
Java
// Maintaining order with no duplicate elements insertion in
// the ArrayList.
import java.util.*;
public class Main {
public static void main(String[] args)
{
// Using LinkedHashSet we can prevent
// insertion of duplicate elements
// as it implements the Set interface
LinkedHashSet UniqueList
= new LinkedHashSet();
// Adding elements to LinkedHashSet
UniqueList.add(1);
UniqueList.add(2);
UniqueList.add(3);
UniqueList.add(3); // duplicate 3 wont be inserted
UniqueList.add(2); // duplicate 2 wont be inserted
// Converting LinkedHashSet to List
List ls
= new ArrayList(UniqueList);
// Printing list
System.out.println(ls);
}
}
输出
[1, 2, 3]