将 Set<Map.Entry<K, V>> 转换为 HashMap<K, V>
在我的代码中的某个时刻,我从映射创建了一个。现在我想重新创建相同的地图表单,因此我想将背面转换为.Java是否有本机调用来执行此操作,或者我是否必须遍历设置的元素并手动构建映射?Set<Map.Entry<K, V>>
HashSet<Map.Entry<K, V>>
HashMap<K, V>
在我的代码中的某个时刻,我从映射创建了一个。现在我想重新创建相同的地图表单,因此我想将背面转换为.Java是否有本机调用来执行此操作,或者我是否必须遍历设置的元素并手动构建映射?Set<Map.Entry<K, V>>
HashSet<Map.Entry<K, V>>
HashMap<K, V>
更简单的 Java-8 解决方案,包括:Collectors.toMap
Map<Integer, String> mapFromSet = set.stream()
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
如果遇到重复的键,将抛出 an。IllegalStateException
Java中没有内置的API用于在和之间直接转换,您需要遍历设置并使用填充映射。HashSet
HashMap
Entry
一种方法:
Map<Integer, String> map = new HashMap<Integer, String>();
//fill in map
Set<Entry<Integer, String>> set = map.entrySet();
Map<Integer, String> mapFromSet = new HashMap<Integer, String>();
for(Entry<Integer, String> entry : set)
{
mapFromSet.put(entry.getKey(), entry.getValue());
}
虽然这里的目的是什么,但如果你做了任何更改,那也会反映在 由 备份返回的集合中。见下文:Set
Map
Map.entrySet
Map
javadoc
Set<Entry<Integer, String>> java.util.Map.entrySet()
返回此映射中包含的映射的 Set 视图。集合由地图支持,因此对地图的更改将反映在集合中,反之亦然。如果在对集合进行迭代时修改映射(除非通过迭代器自己的移除操作,或通过迭代器返回的映射条目的 setValue 操作),则迭代的结果未定义。该集合支持元素删除,它通过 Iterator.remove、Set.remove、removeAll、retainAll 和 clear 操作从映射中删除相应的映射。它不支持添加或添加全部操作。