簡體   English   中英

從兩個Java Collection對象中獲取兩個唯一值

[英]Getting two unique values from two Java Collection objects

我想從兩個Collection對象中獲取唯一值。 我該怎么辦? 示例:我們采用兩個ArrayLists

List bag1 = new ArrayList(); 
List bag2 = new ArrayList();

bag1.add("1");
bag1.add("2");
bag1.add("3");
bag1.add("7");
bag1.add("8");
bag1.add("9");

bag2.add("4");
bag2.add("5");
bag2.add("6");
bag2.add("7");
bag2.add("8");
bag2.add("9");

我需要得到一個結果,比如來自bag1 - > 1,2,3和來自bag2 4,5,6

你能幫幫我嗎?

兩件事情:

  1. 使用org.apache.commons.collections.CollectionUtils.disjunction(Collection a,Collection b);
  2. Bag不是列表的最佳變量名稱。 :)

你應該看一下Sets。 Java Collection有一些類可以解決這個問題。 想法是你可以只是兩個集合之間的設置差異,你會得到你的答案。

使用'set'存儲數據。 這樣,當您向集合添加元素時,您的集合將具有唯一元素。

請參閱此處的javadoc: http//docs.oracle.com/javase/1.4.2/docs/api/java/util/Set.html

你有沒有嘗試過...

bag1.removeAll(bag2);

如果你想保持bag1和bag2完整,可以使用Set變量並將bag1所有值傳遞給Set ,然后檢查contains() like

    Set set = new HashSet();
    set.addAll(bag2);
    for(Object o: bag1){
        if(!set.contains(o)){
            // Do whatever you want with bag1 elements
        }
    }
    set.clear();

    set.addAll(bag1);
    for(Object o: bag2){
        if(!set.contains(o)){
            // Do whatever you want with bag2 elements
        }
    }

使用Set接口中removeAll方法定義。

Set intersect = new TreeSet(bag1);  
intersect.removeAll(bag2);  
List unique1 = Arrays.asList(intersect);  

intersect = new TreeSet(bag2);  
intersect.removeAll(bag1);  
List unique2 = Arrays.asList(intersect);  

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM