基于键列表获取子哈希映射的最佳方法是什么?
我有一个HashMap,我想得到一个新的HashMap,它只包含第一个HashMap中的元素,其中K属于特定列表。
我可以查看所有键并填充新的HashMap,但我想知道是否有更有效的方法可以做到这一点?
谢谢
我有一个HashMap,我想得到一个新的HashMap,它只包含第一个HashMap中的元素,其中K属于特定列表。
我可以查看所有键并填充新的HashMap,但我想知道是否有更有效的方法可以做到这一点?
谢谢
使用Java8流,有一个功能性(优雅)的解决方案。if 是要保留的键的列表,并且是源 。keys
map
Map
keys.stream()
.filter(map::containsKey)
.collect(Collectors.toMap(Function.identity(), map::get));
完整示例:
List<Integer> keys = new ArrayList<>();
keys.add(2);
keys.add(3);
keys.add(42); // this key is not in the map
Map<Integer, String> map = new HashMap<>();
map.put(1, "foo");
map.put(2, "bar");
map.put(3, "fizz");
map.put(4, "buz");
Map<Integer, String> res = keys.stream()
.filter(map::containsKey)
.collect(Collectors.toMap(Function.identity(), map::get));
System.out.println(res.toString());
指纹:{2=bar, 3=fizz}
EDIT 为地图中缺少的键添加filter
是的,有一个解决方案:
Map<K,V> myMap = ...;
List<K> keysToRetain = ...;
myMap.keySet().retainAll(keysToRetain);
对 上的操作将更新基础地图。请参阅 java 文档。retainAll
Set
编辑请注意,此解决方案可修改 .Map