Convert Set<Map.Entry<K, V>> to HashMap<K, V>
Simpler Java-8 solution involving Collectors.toMap
:
Map<Integer, String> mapFromSet = set.stream()
.collect(Collectors.toMap(Entry::getKey, Entry::getValue));
An IllegalStateException
will be thrown if duplicate key is encountered.
There is no inbuilt API in java for direct conversion between HashSet
and HashMap
, you need to iterate through set and using Entry
fill in map.
one approach:
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());
}
Though what is the purpose here, if you do any changes in Set
that will also reflect in Map
as set returned by Map.entrySet
is backup by Map
. See javadoc
below:
Set<Entry<Integer, String>> java.util.Map.entrySet()
Returns a Set view of the mappings contained in this map. The set is backed by the map, so changes to the map are reflected in the set, and vice-versa. If the map is modified while an iteration over the set is in progress (except through the iterator's own remove operation, or through the setValue operation on a map entry returned by the iterator) the results of the iteration are undefined. The set supports element removal, which removes the corresponding mapping from the map, via the Iterator.remove, Set.remove, removeAll, retainAll and clear operations. It does not support the add or addAll operations.
Fairly short Java 8 solution. Can cope with duplicate keys.
Map<Integer, String> map = new HashMap<>();
//fill in map
Set<Map.Entry<Integer, String>> set = map.entrySet();
Map<Integer, String> mapFromSet = set.stream().collect(Collectors.toMap(Entry::getKey,
Entry::getValue,
(a,b)->b));
Edit: thanks to shmosel who deserves more credit than I do for this