【发布时间】:2015-12-05 17:15:00
【问题描述】:
我有这样的地图,
Map<String, Map<String, Set<String>>> sampleMap = new Map<String, Map<String, Set<String>>>();
而这张地图中的数据会是这样的,
sampleMap={2014={A=[1, 2], B=[3], 2015={A=[1,2], B=[1,2], 2016={A=[1,2], B=[3,4]}};
我想根据以下输入从地图中删除键:List<String> filter; 以这种方式使用值,
filterArray : [2014, 2015]
即先逐个遍历arraylist值,验证arraylist值是否与Hashmap中的任何键匹配。
- 如果键匹配忽略它。
- 如果键不匹配,我只想从地图中删除该键。
也就是说,我总是想在 map 中只保留匹配的键,与传递的输入值进行比较。
在这种情况下,因为我以这种方式拥有 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]}};
删除后的数据:
sampleMap={2014={A=[1, 2], B=[3], 2015={A=[1,2], B=[1,2]}};
我尝试过这种方式,但是我只想知道这是正确的方法,还是容易出现任何异常?
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();
}
}
【问题讨论】:
-
filterArray.equalsIgnoreCase(..)...我想知道这在您的示例中是如何工作的。你能解释一下吗? (什么是filterArray)
标签: java collections iterator hashmap set