根据地图的键子集过滤地图的元素,而无需迭代整个内容
2022-08-31 16:03:14
我有一个和一个.有没有办法将映射的键与字符串集“相交”,以便仅保留具有给定键的对,而不迭代整个映射?我主要关心的是性能和在可以更优雅地完成的事情上重新发明车轮。Map<String, ArrayList>
Set<String>
我有一个和一个.有没有办法将映射的键与字符串集“相交”,以便仅保留具有给定键的对,而不迭代整个映射?我主要关心的是性能和在可以更优雅地完成的事情上重新发明车轮。Map<String, ArrayList>
Set<String>
只需做:
map.keySet().retainAll(set);
根据javadoc,键集中的更改将反映在映射中。
...集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。...
下面是一个演示:
Map<String, String> map = new HashMap<String, String>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
Set<String> set = new HashSet<String>();
set.add("1");
set.add("3");
map.keySet().retainAll(set);
System.out.println(map); // {3=three, 1=one}
详细阐述了BalusC的出色答案,values()也支持 retainAll():
Map<String, String> map = new HashMap<String, String>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
Set<String> set = new HashSet<String>();
set.add("one");
set.add("two");
map.values().retainAll(set);
System.out.println(map); // prints {1=one, 2=two}
retailAll 也保留重复值,正如您所期望的那样:
Map<String, String> map = new HashMap<String, String>();
map.put("1", "one");
map.put("2", "two");
map.put("3", "three");
map.put("4", "two");
Set<String> set = new HashSet<String>();
set.add("one");
set.add("two");
map.values().retainAll(set);
System.out.println(map); // prints {1=one, 2=two, 4=two}