[英]How to get unique values in List
我有2個帶有數據的文本文件。 我正在使用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());
或者,根本不要使用List; 只需從集合的開頭使用Set(如HashSet),您只想擁有唯一值。
將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);
}
互聯網上的很多帖子都在說我將Arraylist分配給List,Set,HashTable或TreeSet。 任何人都可以解釋理論上的差異,並且在實踐中是最好的用途嗎? 為你的時間而努力。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.