【问题标题】:How to get unique values in List如何在列表中获取唯一值
【发布时间】:2014-11-26 22:06:48
【问题描述】:

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

我每个都有重复的数据,但是我需要在第一个 List 中拥有唯一的数据,以面对第二个 List 中的重复数据。

如何从 List 获取唯一值?

【问题讨论】:

  • 如果列表已经contains()它,不要添加重复值?

标签: java list unique-values


【解决方案1】:

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

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

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

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

或者,根本不要使用列表;只需从一开始就为您只想保存唯一值的集合使用 Set(如 HashSet)。

【讨论】:

  • 我想你的意思是:list.stream().distinct().collect(Collectors.toList());
  • @MoGa 我年轻,愚蠢,恋爱了。谁能怪我如此愚蠢? (谢谢 - 代码更正)
  • 哈哈,你的代码实际上为我指明了正确的方向;)干杯
【解决方案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】:

    我只是意识到一个解决方案可能对其他人有帮助。 首先将填充来自 BufferReader 的重复值。

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

    要提取唯一值,我只需创建一个新的 ArrayList,如下所示:

    ArrayList<String> otherList = new ArrayList<>();
    
        for(String s : first) {
            if(!otherList.contains(s))
                otherList.add(s);
        }
    

    互联网上的很多帖子都在谈论将我的 Arraylist 分配给 List 、 Set 、 HashTable 或 TreeSet。 任何人都可以解释理论上的区别,而其中一个是实践中最好的吗? 谢谢你们的时间。

    【讨论】:

    • Java API 文档为每个集合类和接口提供了详尽的文档。 Wikipedia page on lists 还提供概述和指向有关其他集合类型的页面的链接。
    【解决方案4】:

    ArrayList 转换为HashSet

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

    如果出于某种原因,您想在之后将集合转换回列表,您可以,但很可能不需要。

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

    【讨论】:

    • 非常感谢您的回答。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-12
    • 2022-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-11
    相关资源
    最近更新 更多