Создайте SortedMap в Java с пользовательским Компаратором

Я хочу создать a TreeMap в Java с пользовательским порядком сортировки. Отсортированные ключи, которые являются строкой, должны быть отсортированы согласно второму символу. Значения являются также строкой.

Демонстрационная карта:

Za,FOO
Ab,Bar
21
задан polygenelubricants 10 May 2010 в 07:49
поделиться

2 ответа

Вы можете использовать собственный компаратор следующим образом:

    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 более читабельно.

См. Также:

32
ответ дан 29 November 2019 в 21:17
поделиться

Предполагая, что вы не имеете в виду Hash как хэш-функцию или что-то в этом роде...

Вы можете легко добиться этого, создав класс-"обертку" для String и переопределив метод compareTo

0
ответ дан 29 November 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: