我有两个包含数据的文本文件。我使用BufferReader
读取这些文件,并将每个文件中一列的数据放入一个List<String>
中。
这两个列表中都有重复的数据,但是我需要在第一个List
中获取唯一的数据来与第二个List
中的重复数据进行对比。
如何从List
中获取唯一值?
我有两个包含数据的文本文件。我使用BufferReader
读取这些文件,并将每个文件中一列的数据放入一个List<String>
中。
这两个列表中都有重复的数据,但是我需要在第一个List
中获取唯一的数据来与第二个List
中的重复数据进行对比。
如何从List
中获取唯一值?
可以通过使用一个中间Set
在一行上完成:
List<String> list = new ArrayList<>(new HashSet<>(list));
在Java 8中,对流使用distinct()
方法:List<String> list = list.stream().distinct().collect(Collectors.toList());
另外,可以不使用列表;而是从一开始就使用集合(如 HashSet)来存储您只想保存唯一值的集合。
list.stream().distinct().collect(Collectors.toList());
。 - MoGa将 ArrayList
转换为 HashSet
。
List<String> listWithDuplicates; // Your list containing duplicates
Set<String> setWithUniqueValues = new HashSet<>(listWithDuplicates);
如果出于某些原因,您希望在之后将集合转换回列表,那么您可以这样做,但很可能没有这种需要。List<String> listWithUniqueValues = new ArrayList<>(setWithUniqueValues);
在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方法。
我刚刚意识到一个解决方案,可能对其他人有帮助。 首先,将使用BufferReader填充重复的值。
ArrayList<String> first = new ArrayList<String>();
为了提取唯一值,我只需创建一个新的ArrayList,如下所示:
ArrayList<String> otherList = new ArrayList<>();
for(String s : first) {
if(!otherList.contains(s))
otherList.add(s);
}
contains()
该值,则不要添加重复的值。 - Elliott Frisch