📜  如何使用Java 8 从 ArrayList 获取唯一值?

📅  最后修改于: 2022-05-13 01:54:35.241000             🧑  作者: Mango

如何使用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]