What is the best way to convert a Map<key,value>
to a List<value>
? Just iterate over all values and insert them in a list or am I overlooking something?
14 Answers
The issue here is that Map
has two values (a key and value), while a List
only has one value (an element).
Therefore, the best that can be done is to either get a List
of the keys or the values. (Unless we make a wrapper to hold on to the key/value pair).
Say we have a Map
:
Map<String, String> m = new HashMap<String, String>();
m.put("Hello", "World");
m.put("Apple", "3.14");
m.put("Another", "Element");
The keys as a List
can be obtained by creating a new ArrayList
from a Set
returned by the Map.keySet
method:
List<String> list = new ArrayList<String>(m.keySet());
While the values as a List
can be obtained creating a new ArrayList
from a Collection
returned by the Map.values
method:
List<String> list = new ArrayList<String>(m.values());
The result of getting the List
of keys:
Apple Another Hello
The result of getting the List
of values:
3.14 Element World
I guess you want to convert the values contained in the Map
to a list
? Easiest is to call the values()
method of the Map
interface. This will return the Collection
of value objects contained in the Map
.
Note that this Collection
is backed by the Map
object and any changes to the Map
object will reflect here. So if you want a separate copy not bound to your Map
object, simply create a new List
object like an ArrayList
passing the value Collection
as below.
ArrayList<String> list = new ArrayList<String>(map.values());
Map<String, Integer> map = new HashMap<String, Integer>();
map.put("java", 20);
map.put("C++", 45);
Set <Entry<String, Integer>> set = map.entrySet();
List<Entry<String, Integer>> list = new ArrayList<Entry<String, Integer>>(set);
we can have both key and value pair in list.Also can get key and value using Map.Entry by iterating over list.
If you want to ensure the values in the resultant List<Value>
are in the key-ordering of the input Map<Key, Value>
, you need to "go via" SortedMap
somehow.
Either start with a concrete SortedMap
implementation (Such as TreeMap
) or insert your input Map
into a SortedMap
before converting that to List
. e.g.:
Map<Key,Value> map;
List<Value> list = new ArrayList<Value>( new TreeMap<Key Value>( map ));
Otherwise you'll get whatever native ordering the Map
implementation provides, which can often be something other than the natural key ordering (Try Hashtable
or ConcurrentHashMap
, for variety).
"Map<String , String > map = new HapshMap<String , String>;
map.add("one","java");
map.add("two" ,"spring");
Set<Entry<String,String>> set = map.entrySet();
List<Entry<String , String>> list = new ArrayList<Entry<String , String>> (set);
for(Entry<String , String> entry : list ) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
} "