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
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.