Re: Sort Map on Value
Wojtek wrote:
I have a Person object. It contains a pKey (unique) and a name (may
repeat, ie John Smith). The Person object will be held in a collection.
New (or old) people will be added in any order, however I want the
output to be sorted by name. Since the name can repeat I cannot use it
as a key, instead I want to use the pKey.
Normally (sorted on the key) I would use a TreeMap, but I want to use
the key to find a Person, yet sort on the Perons name:
Eva first, then Juan. :-)
Map<PKey,Person> map = ...
Person p1 = ...
map.put(p1.getKey(), p1);
Person p2 = ...;
map.put(p2.getKey(), p2);
...
Person[] array = map.values().toArray(new Person[0]);
Arrays.sort(array, new Comparator<Person>() {
public int compare(Person p1, Person p2) {
return p1.getName().compareTo(p2.getName());
}
});
for (Person p : array) {
... visit in name order ...
}
In other words, just maintain the Map in the perfectly ordinary
way. When you want to traverse all the Persons in name order (which
is inherently a "batch" or "mass" operation), grab them from the Map,
sort them in whatever order you like, and traverse to heart's content.
--
Eric.Sosman@sun.com