我有一个Map<String, ArrayList>和一个Set<String>,有没有一种方法可以将map的键与字符串集“相交”,这样就只保留具有给定键的键对,而不需要迭代整个map?我主要关心的是性能和重新发明轮子,以便更优雅地完成一些事情。
Map<String, ArrayList>
Set<String>
u3r8eeie1#
只需:
map.keySet().retainAll(set);
按照javadoc,键集中的更改将反映回Map中。...集合由Map支持,因此对Map的更改会反映在集合中,反之亦然...下面是一个演示:
var map = new HashMap<String, String>(); map.put("1", "one"); map.put("2", "two"); map.put("3", "three"); var set = new HashSet<String>(); set.add("1"); set.add("3"); map.keySet().retainAll(set); System.out.println(map); // {1=one, 3=three}
yb3bgrhw2#
详细说明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}
2条答案
按热度按时间u3r8eeie1#
只需:
按照javadoc,键集中的更改将反映回Map中。
...集合由Map支持,因此对Map的更改会反映在集合中,反之亦然...
下面是一个演示:
yb3bgrhw2#
详细说明BalusC的优秀答案,values()也支持retainAll():
retailAll也会保留重复值,正如您所期望的: