Re: exporting a HashMap
On 1/15/2012 11:30 AM, Roedy Green wrote:
What is best code to export key-value pairs from a HashMap into some
structure in key-value order.
One possible way is to extract the keys, sort them, then look up the
values. That strikes me as infantile. Surely there is a better way.
The best I can think of is to invent a Pair dummy class, extract the
fields from an Entry into the two fields, and sort them in an array.
Part of the problem is generics and arrays don't mix.
Why invent a Pair when Map.Entry already holds the data? Just
typed in, unchecked:
Map<K,V> map = ...;
List<Map.Entry<K,V>> entries =
new ArrayList<Map.Entry<K,V>>(map.entrySet());
Collections.sort(entries, new Comparator<Map.Entry<K,V>>() {
@Override
public int compare(Map.Entry<K,V> e1, Map.Entry<K,V> e2) {
return e1.getKey().compareTo(e2.getKey());
}
});
for (Map.Entry<K,V> e : entries) { ... }
There's scary Javadoc about the longevity of Map.Entry, but as long
as the underlying Map isn't changed all should be well.
Another approach is to use a SortedMap, either ab initio or as
a substitute for the List-and-sort above:
Map<K,V> map = ...;
SortedMap<K,V> map2 = new TreeMap<K,V>(map);
for (Map.Entry<K,V> e : map2.entrySet()) { ... }
--
Eric Sosman
esosman@ieee-dot-org.invalid