I want to create a TreeMap
in Java with a custom sort order. The sorted keys which are string need to be sorted according to the second character. The values are also string.
Sample map:
Za,FOO Ab,Bar
SortedMap<String, Double> myMap = new TreeMap<String, Double>(new Comparator<Entry<String, Double>>() { public int compare(Entry<String, Double> o1, Entry<String, Double> o2) { return o1. getValue(). compareTo(o2. getValue()); } });
Sort HashMap by Values using Comparator InterfaceTo sort the HashMap by values, we need to create a Comparator. It compares two elements based on the values. After that get the Set of elements from the Map and convert Set into the List.
SortedMap is an interface in the collection framework. This interface extends the Map interface and provides a total ordering of its elements (elements can be traversed in sorted order of keys).
You can use a custom comparator like this:
Comparator<String> secondCharComparator = new Comparator<String>() { @Override public int compare(String s1, String s2) { return s1.substring(1, 2).compareTo(s2.substring(1, 2)); } };
Sample:
SortedMap<String,String> map = new TreeMap<String,String>(secondCharComparator); map.put("Za", "FOO"); map.put("Ab", "BAR"); map.put("00", "ZERO"); System.out.println(map); // prints "{00=ZERO, Za=FOO, Ab=BAR}"
Note that this simply assumes that the String
has a character at index 1. It throws StringIndexOutOfBoundsException
if it doesn't.
Alternatively, you can also use this comparison:
return s1.charAt(1) - s2.charAt(1);
This subtraction "trick" is broken in general, but it works fine here because the subtraction of two char
will not overflow an int
.
The substring
andcompareTo
solution above is more readable, though.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With