如何在List中获取唯一值

时间:2014-10-01 22:56:47

标签: java list unique-values

我有2个包含数据的文本文件。我正在使用BufferReader阅读这些文件,并将每个文件的一列数据放在List<String>中。

我在每个数据中都有重复数据,但我需要在第一个List中拥有唯一数据,以便与第二个List中的重复数据进行对比。

如何从List获取唯一值?

4 个答案:

答案 0 :(得分:17)

可以使用中间Set来完成一行:

List<String> list = new ArrayList<>(new HashSet<>(list));

在java 8中,在流上使用distinct()

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

或者,根本不要使用List;只需从集合的开头使用Set(如HashSet),您只想拥有唯一值。

答案 1 :(得分:8)

ArrayList转换为HashSet

List<String> listWithDuplicates; // Your list containing duplicates
Set<String> setWithUniqueValues = new HashSet<>(listWithDuplicates);

如果出于某种原因,您希望之后将该组转换回列表,则可以,但很可能没有必要。

List<String> listWithUniqueValues = new ArrayList<>(setWithUniqueValues);

答案 2 :(得分:2)

在Java 8中

     // List with duplicates
     List<String> listAll = Arrays.asList("A", "A", "B", "C", "D", "D");

     // filter the distinct 
     List<String> distinctList = listAll.stream()
                     .distinct()
                     .collect(Collectors.toList());

    System.out.println(distinctList);// prints out: [A, B, C, D]

这也适用于对象,但您可能需要调整equals方法。

答案 3 :(得分:0)

我刚刚意识到解决方案可能对其他人有帮助。 首先将使用BufferReader中的重复值填充。

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

要提取唯一值,我只需创建一个新的ArrayList,例如down:

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

    for(String s : first) {
        if(!otherList.contains(s))
            otherList.add(s);
    }

互联网上的很多帖子都在说我将Arraylist分配给List,Set,HashTable或TreeSet。 任何人都可以解释理论上的差异,并且在实践中是最好的用途吗? 为你的时间而努力。