从列表中删除另一个列表中不存在的所有对象

时间:2015-05-12 19:00:22

标签: java arraylist collections hashmap java-collections-api

我有两个清单

    List<Map<String,Object>> list1 =  new ArrayList<Map<String,Object>>();
    List<Map<String,Object>> list2 =  new ArrayList<Map<String,Object>>();

    HashMap<String, Object> hm = new HashMap<String, Object>();
    hm.put("1", new Long(1L));
    HashMap<String, Object> hm2 = new HashMap<String, Object>();
    hm2.put("2", new Long(2L));
    HashMap<String, Object> hm3 = new HashMap<String, Object>();
    hm3.put("3", new Long(3L));
    HashMap<String, Object> hm4 = new HashMap<String, Object>();
    hm4.put("4", new Long(4L));

    list1.add(hm);
    list1.add(hm2);
    list1.add(hm3);
    list1.add(hm4);

    HashMap<String, Object> hm1 = new HashMap<String, Object>();
    hm1.put("1", new Long(1L));
    HashMap<String, Object> hm5 = new HashMap<String, Object>();
    hm5.put("2", new Long(2L));

    list2.add(hm1);
    list2.add(hm5);

我想从list1中删除另一个list2中不存在的所有对象 我的预期输出为list1 -- [{2=2, 1=1}]

我可以通过list1进行迭代,并且可以检查元素是否存在然后不执行任何操作删除元素。但我想知道有更好的方法还是更简单的代码?

1 个答案:

答案 0 :(得分:10)

Collection.retainAll方法确实存在于此目的:

  

仅保留此集合中包含在指定集合中的元素。换句话说,从此集合中删除未包含在指定集合中的所有元素。

用法是:

list1.retainAll(list2);

除非您使用Set代替List s,否则它可能不会比天真的迭代方法更有效。