0

Possible Duplicate:
TreeMap sort by value

Hi I want to sort TreeMap Collection by value not by its key. For eg,

 TreeMap map=new TreeMap();
    map.put(new Integer(100),"ccc");
    map.put(new Integer(300),"bbb");
    map.put(new Integer(200),"ddd");
    map.put(new Integer(400),"aaa");

It should be ordered as,

1) 400 -> aaa
2) 300 -> bbb
3) 100 -> ccc
4) 200 -> ddd
Community
  • 1
  • 1
Srinivasan
  • 11,718
  • 30
  • 64
  • 92

1 Answers1

1

You need a special iterator, try this

...
    Iterator i = valueIterator(map);
    while(i.hasNext()) {
        System.out.println(i.next());
    }
...
    Iterator valueIterator(TreeMap map) {
        Set set = new TreeSet(new Comparator<Map.Entry<Integer, String>>() {
            @Override
            public int compare(Entry<Integer, String> o1, Entry<Integer, String> o2) {
                return  o1.getValue().compareTo(o2.getValue()) > 0 ? 1 : -1;
            }
        });
        set.addAll(map.entrySet());
        return set.iterator();
    }

output

400=aaa
300=bbb
100=ccc
200=ddd

You can extend TreeMap and add this method to it. Note that the Comparator allows duplicate values because it never returns 0.

Evgeniy Dorofeev
  • 133,369
  • 30
  • 199
  • 275