【问题标题】:Remove all objects from list that does not exist in another list从列表中删除另一个列表中不存在的所有对象
【发布时间】:2015-07-23 19:52:19
【问题描述】:

我有两个列表

    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 并且可以检查元素是否存在然后什么都不做删除元素。但我想知道是否有更好的方法或更简单的代码?

【问题讨论】:

  • 您使用的是 Java 8 吗?
  • java版本“1.6.0_43”
  • 您的意思是同时聚合 HashMaps 的内容吗?还是希望预期的输出为 [{"2"=2L},{"1"=1L}]
  • 我打算输出[{"2"=2L},{"1"=1L}]

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


【解决方案1】:

Collection.retainAll 方法正是为此目的而存在的:

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

用法如下:

list1.retainAll(list2);

但是,它可能不会比简单的迭代方法更有效,除非您使用 Sets 而不是 Lists。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-08
    • 2019-07-02
    • 2011-01-31
    • 2011-05-11
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    相关资源
    最近更新 更多