3

我想从两个 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");

我需要得到类似 --> 1,2,3 frombag1和 4,5,6 from的结果bag2

你能帮帮我吗?

4

5 回答 5

1

两件事情:

  1. 使用 org.apache.commons.collections.CollectionUtils.disjunction(Collection a, Collection b);
  2. Bag 不是列表的最佳变量名称。:)
于 2012-07-28T04:17:38.040 回答
0

你应该看看 Sets 。Java Collection 有几个类可以处理这个问题。这个想法是你可以只是两个集合之间的设定差异,你会得到你的答案。

于 2012-07-28T04:14:41.523 回答
0

使用“集合”来存储您的数据。这样,当您将元素添加到集合中时,您的集合将具有独特的元素。

请参阅此处的 javadoc:http: //docs.oracle.com/javase/1.4.2/docs/api/java/util/Set.html

于 2012-07-28T04:14:44.447 回答
0

你有没有尝试过...

bag1.removeAll(bag2);

如果你想保持 bag1 和 bag2 完好无损,你可以使用 Set 变量并将所有值传递bag1给 theSet然后检查contains()类似

    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
        }
    }
于 2012-07-28T04:50:03.283 回答
0

使用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);  
于 2012-07-28T05:30:26.533 回答