This post was first published on my Wordpress page link

This task could be done in different ways. Here a discussion about some ways. In this post I will show one that I followed. Roughly speaking, the idea is convert the map into a list with the purpose of use the classic Collection.sort() method. The first think is that you need is to define a new class, that represents one map entry; and implements the Comparable interface. In this class you have to implement the compareTo method and override the toString (if you want).

import java.util.Map;
 
@SuppressWarnings("rawtypes")
public class CustomEntry implements Comparable
{
    private Map.Entry   entry;
 
    public CustomEntry(Map.Entry entry)
    {
        this.entry = entry;
    }
 
    public Map.Entry getEntry()
    {
        return this.entry;
    }
 
    public int compareTo(CustomEntry anotherEntry)
    {
        Integer thisIntegerVal = (Integer) (this.getEntry().getValue());
        int thisVal = thisIntegerVal.intValue();
        Integer anotherIntegerVal = (Integer) (anotherEntry.getEntry().getValue());
        int anotherVal = anotherIntegerVal.intValue();
        return (thisVal < anotherVal ? 1 : (thisVal == anotherVal ? 0 : -1));
    }
 
    public int compareTo(Object o)
    {
        return compareTo((CustomEntry) o);
    }
 
    @Override
    public String toString()
    {
        StringBuilder str = new StringBuilder();
        str.append(this.getEntry().getKey()).append(":").append(this.getEntry().getValue());
        return str.toString();
    }
}

Next step is to define the function that will convert any map into a list. Basically, this function will recover the entries in the map, and transform them into custom entries using the previous class CustomEntry.

import java.util.*;
import java.util.Map.Entry;
 
public class MapFunctions
{
    public MapFunctions()
    {
    }
 
    public static <T, E> List<CustomEntry> convertMapToList(Map<T, E> map)
    {
        List<CustomEntry> list = new ArrayList<CustomEntry>();
        Set<Entry<T, E>> entrySet = map.entrySet();
        Iterator<Entry<T, E>> iterator = entrySet.iterator();
        while (iterator.hasNext())
        {
            Map.Entry<T, E> entry = (Map.Entry<T, E>) iterator.next();
            CustomEntry customEntry = new CustomEntry(entry);
            list.add(customEntry);
        }
        return list;
    }
}

Now, you are allowed to execute the following instructions:

THashMap<String, Integer> map = ... /* some initialization */
List<CustomEntry> sortedList = MapFunctions.convertMapToList(map);
Collections.sort(sortedList);
System.out.println(sortedList);

and you will print the list of entries (from your original map) sorted based on its (original) values.

Cheers!