Вы можете использовать собственный компаратор, например так:
Comparator<String> secondCharComparator = new Comparator<String>() {
@Override public int compare(String s1, String s2) {
return s1.substring(1, 2).compareTo(s2.substring(1, 2));
}
};
Пример:
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}"
Обратите внимание, что это просто предполагает, что String
имеет символ с индексом 1. Он выдает StringIndexOutOfBoundsException
, если его нет.
Кроме того, вы также можете использовать это сравнение:
return s1.charAt(1) - s2.charAt(1);
Эта «хитрость» вычитания в общем нарушена, но здесь она работает нормально, потому что вычитание двух char
не будет переполнено int
.
Приведенное выше решение substring
и compareTo
более читабельно.
Смотри также: