我有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