retainAll更改最后一个元素

时间:2012-04-25 04:26:30

标签: java collections

List<Left> resultList = lists.iterator().next();
    for (Iterator iterator = lists.iterator(); iterator.hasNext();) {
        List<Left> list = (List<Left>) iterator.next();         
        resultList.retainAll(list);
    }

    /*for (Left left : resultList) {
         System.out.println(left.getData());
    }*/

    for (Left left : mLeft) {           
        ArrayList<Left> mTempList = left.getArray();    
        for (Iterator iterator = mTempList.iterator(); iterator.hasNext();) {
            Left left2 = (Left) iterator.next();
            System.out.println(left2.getData());
        }
    }

我试图找出常见的元素,我的原始列表正在改变。我的意思是当我打印列表时,只有最后一个元素被更改。 任何建议。

1 个答案:

答案 0 :(得分:1)

resultList被分配到集合lists中的第一个元素,位于顶部。

在第4行,您针对retainAll执行resultList而不更改分配给resultList的内容 - 它仍然指向lists中的第一个对象。

您可以考虑创建一个新的List<Left>对象,以便在开始时检查公共元素,而不是如何声明resultList

List<Left> resultList = new List<Left>();
resultList.addAll ((List<Left>) lists.iterator().next());
...

然后,当您打印元素时,您将希望在最终循环中使用resultList。

请注意,您仍然认为lists至少有一个元素 - 如果它是空的,您将获得例外。