2013-02-01 30 views
-1

我需要在比較兩個列表時獲取非常見元素的列表。 例如: -如何使用java從兩個列表中獲取非常見元素的列表?

List<String> readAllName = {"aaa","bbb","ccc","ddd"}; 
List<String> selectedName = {"bbb","ccc"}; 

在這裏,我想從readAllName名單在另一個列表( 「AAA」, 「CCC」, 「DDD」)不常見的元素。 不使用remove()和removeAll()。

+0

aaa和ccc如何? – assylias

+0

ccc怎麼樣?它是否也應該列入最終名單? – assylias

+0

ccc如何不常見? – Ajeetkumar

回答

8

假設預期輸出爲aaa, ccc, eee, fff, xxx(所有不常見的項目),您可以使用List#removeAll,但你需要使用兩次獲得無論是在名稱中NAME2的項目,但不併在NAME2而不是在項目名稱:

List<String> list = new ArrayList<> (name); 
list.removeAll(name2); //list contains items only in name 

List<String> list2 = new ArrayList<> (name2); 
list2.removeAll(name); //list2 contains items only in name2 

list2.addAll(list); //list2 now contains all the not-common items 

根據您的編輯,你不能使用removeremoveAll - 在這種情況下,你可以簡單地運行兩個循環:

List<String> uncommon = new ArrayList<>(); 
for (String s : name) { 
    if (!name2.contains(s)) uncommon.add(s); 
} 
for (String s : name2) { 
    if (!name.contains(s)) uncommon.add(s); 
} 
+0

不使用remove()和removeAll() – Arunprasad

+1

@Arun爲什麼不呢?如果有任何限制,您需要在問題中說清楚。 – assylias

+0

bcz我試過了,它在@postconstruct方法中不起作用,但是它能夠正常工作,我不知道是什麼? – Arunprasad

0

您可以使用番石榴圖書館來做到這一點。 Sets類有一個difference方法

你將不得不運行它兩次,我想從雙方獲得所有的差異。

相關問題