我有2个带有数据的文本文件。我正在用BufferReader
读取这些文件,并将每个文件一列的数据放在List<String>
中。如何获得列表中的唯一值
我在每一个中都有重复的数据,但是我需要在第一个List
中有唯一的数据来对付第二个List
中的重复数据。
如何从List
获得唯一值?
我有2个带有数据的文本文件。我正在用BufferReader
读取这些文件,并将每个文件一列的数据放在List<String>
中。如何获得列表中的唯一值
我在每一个中都有重复的数据,但是我需要在第一个List
中有唯一的数据来对付第二个List
中的重复数据。
如何从List
获得唯一值?
将ArrayList
转换为HashSet
。
List<String> listWithDuplicates; // Your list containing duplicates
Set<String> setWithUniqueValues = new HashSet<>(listWithDuplicates);
如果由于某种原因,您想要将设置转换回列表后,您可以,但很有可能没有必要。
List<String> listWithUniqueValues = new ArrayList<>(setWithUniqueValues);
为你答案很多。 – 2014-10-01 23:06:17
我刚刚意识到一个解决方案可能对其他人有帮助。 首先将从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分配给一个列表,集,哈希表或TreeSet中。 任何人都可以解释理论上的差异,并在实践中最好的使用tu? thnks为你的时间伙计。
Java API文档为每个集合类和接口提供详细的文档。 [列表上的维基百科页面](http://en.wikipedia.org/wiki/List_(abstract_data_type))也提供了有关其他集合类型的页面的概述和链接。 – 2014-10-01 23:18:40
它可以通过使用一个完成一行的中间Set
:
List<String> list = new ArrayList<>(new HashSet<>(list));
在java中8,在一个流使用distinct()
:
List<String> list = list.stream().distinct().collect(Collectors.toList());
可替换地,在不使用一个列表所有;只需从集合的起始处使用Set(如HashSet),您只需保存唯一值。
在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方法。
如果列表已经包含()它,不要添加重复值? – 2014-10-01 22:59:44