Я хочу создать a TreeMap
в Java с пользовательским порядком сортировки. Отсортированные ключи, которые являются строкой, должны быть отсортированы согласно второму символу. Значения являются также строкой.
Демонстрационная карта:
Za,FOO
Ab,Bar
Вы можете использовать собственный компаратор следующим образом:
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}"
Обратите внимание, что здесь просто предполагается, что Строка
имеет символ с индексом 1. В противном случае он выбрасывает StringIndexOutOfBoundsException
.
В качестве альтернативы вы также можете использовать это сравнение:
return s1.charAt(1) - s2.charAt(1);
Этот «трюк» с вычитанием в целом не работает, но здесь он отлично работает, потому что вычитание двух char
не приведет к переполнению int
.
Однако приведенное выше решение substring
и compareTo
более читабельно.
Предполагая, что вы не имеете в виду Hash как хэш-функцию или что-то в этом роде...
Вы можете легко добиться этого, создав класс-"обертку" для String и переопределив метод compareTo