如何迭代和删除Map <String,Map <String,Set <String >>>中的键

San*_*ndy -1 java collections iterator hashmap set

我有这样的地图,

Map<String, Map<String, Set<String>>> sampleMap = new Map<String, Map<String, Set<String>>>();
Run Code Online (Sandbox Code Playgroud)

这个地图中的数据就是这样的,

sampleMap={2014={A=[1, 2], B=[3], 2015={A=[1,2], B=[1,2], 2016={A=[1,2], B=[3,4]}};
Run Code Online (Sandbox Code Playgroud)

我想根据这个输入从地图中删除密钥:List<String> filter;这样的值,

filterArray : [2014, 2015]
Run Code Online (Sandbox Code Playgroud)

即,首先逐个遍历arraylist值,验证arraylist值是否与Hashmap中的任何键匹配.

  • 如果匹配密钥则忽略它.
  • 如果密钥不匹配,我只想从地图中删除该密钥.

即,我总是希望只保留地图中匹配的键,与传递的输入值进行比较.

在这种情况下,因为我有这样的arraylist值,[2014,2015],

2014,2015键只能在我的地图中.所以,

删除前的数据:

sampleMap={2014={A=[1, 2], B=[3], 2015={A=[1,2], B=[1,2], 2016={A=[1,2], B=[3,4]}};
Run Code Online (Sandbox Code Playgroud)

移动后的数据:

sampleMap={2014={A=[1, 2], B=[3], 2015={A=[1,2], B=[1,2]}};
Run Code Online (Sandbox Code Playgroud)

我试过这种方式,但我只是想知道这是正确的approch,还是容易出现任何异常?

Iterator<Map.Entry<String , Map<String, Set<String>>>> iter = sampleMap.entrySet().iterator();
while (iter.hasNext()) {
    Map.Entry<String , Map<String, Set<String>>> entry = iter.next();
    logger.info("Keys : " + entry.getKey());
    if (filterArray.equalsIgnoreCase(entry.getKey())) {
        iter.remove();
    }
}
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 6

retainAll()在keySet上使用:

map.keySet().retainAll(list);
Run Code Online (Sandbox Code Playgroud)