从列表<map <key,value>&gt;中删除地图如果key属于列表

时间:2018-03-16 03:16:46

标签: java spring

我有List<Map<key,value>>。如果密钥存在于List

中,我想从列表中删除它

例如:

输入:List<Map<a,1>,Map<b,2>,Map<c,3>>(此处为地图),List<a,d,e>

说明:由于<a,1>中存在地图List<a,d,e>中的键,我想从List<Map<a,1>,Map<b,2>,Map<c,3>>中删除地图

输出:List<Map<b,2>,Map<c,3>>

2 个答案:

答案 0 :(得分:0)

也许您可以使用java stream api,并执行以下操作:

public class Mapping {

    public static void main(String args[])
    {
        List<Map<String,Integer>> db = new LinkedList<Map<String,Integer>>();
        Map<String,Integer> item = new HashMap<String,Integer>();
        item.put("a", 1);
        item.put("b", 2);
        item.put("c", 3);
        db.add(item);

        List<String> excludeList = Arrays.asList("a");

        List<Map<String,Integer>> newDb = db.stream().map(sample->{
            Map<String,Integer> newSample = new HashMap<String,Integer>(sample); //we do not mutate original elements
            excludeList.forEach(key->newSample.remove(key));
            return newSample;
        }).collect(Collectors.toList());
        System.out.println(db); //[{a=1, b=2, c=3
        System.out.println(newDb); //[{b=2, c=3}]
    }

}

以这种方式,您保留原始和新的过滤列表

答案 1 :(得分:0)

如果要使用地图列表检查排除键

,请尝试此操作
public static void main(String[] args)
{
    List<String> removeList = Arrays.asList("a","d","e");
    List<Map<String, Integer>> maps = new ArrayList<>();
    //Map1
    Map<String, Integer> map1 = new HashMap<>();
    map1.put("a", 1);
    map1.put("b", 2);
    map1.put("c", 3);
    maps.add(map1);

    //Map2
    Map<String, Integer> map2 = new HashMap<>();
    map2.put("e", 1);
    map2.put("f", 2);
    map2.put("g", 3);
    maps.add(map2);

    for(String string : removeList)
    {
        for(Map<String, Integer> eachMap: maps)
        {
            eachMap.remove(string);
        }
    }
    System.out.println(maps);

}