dav*_*ave 52 java collections intersection map set
我有一个Map<String, ArrayList>
和一个Set<String>
.有没有办法将地图的键与字符串集"相交",以便只保留具有给定键的对,而不迭代整个地图?我主要担心的是性能并重新发明了可以更优雅地完成工作的轮子.
Bal*_*usC 117
做就是了:
map.keySet().retainAll(set);
Run Code Online (Sandbox Code Playgroud)
根据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}
Run Code Online (Sandbox Code Playgroud)
详细说明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}
Run Code Online (Sandbox Code Playgroud)
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}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
22981 次 |
最近记录: |