Как создать компаратор ключа на карте, где значение ключа является строкой в ​​Java? - PullRequest
0 голосов
/ 06 января 2011

как создать компаратор ключа на карте, где значение ключа является строкой в ​​Java?

, потому что я хочу поменять местами значения ключей на карте?

Есть ли способ сортировки этих чисел, хранящихся в строковой переменной?

TreeMap <String,List<QBFElement>> qbfElementMap = new TreeMap<String, List<QBFElement>>();

27525-1813, 27525-3989, 27525-4083, 27525-4670, 27525-4911,27526-558,
27526-1303, 27526-3641, 27526-4102, 27527-683, 27527-2411, 27527-4342

это список ключей и значение для каждого из ключейэто список.
Теперь, как я могу отсортировать этот ключ в порядке возрастания по номеру.

отл.если я хочу отсортировать: 1,2,11,20,31,3,10
я хочу получить в качестве результата: 1,2,3,10,11,20,31
но когда я используюавтосортировка дерева карт выводит: 1,10,11,2,20,3,31

как я могу отсортировать его в порядке возрастания по числовому значению?

и язык java :) спасибо :)

Ответы [ 2 ]

1 голос
/ 06 января 2011

Когда вы создаете TreeMap, предоставьте компаратор, который сортирует так, как вы ожидаете.

Map<String,List<QBFElement>> qbfElementMap = 
    new TreeMap<String,List<QBFElement>>(new Comparator<String>() {
        @Override
        public int compare(Object o1, Object o2) {
            // compare your strings in ways that you understand
            // presumably 11111-0000 sorts before 11111-0001
            // left as an exercise for the reader
        }
        @Override
        public boolean equals(Object o) {
            return this == o;
        }
    });

Но прочитайте документацию для Comparator, включая немного о реализации Serializable, как это особенно заметно при использовании Comparator в сериализуемых структурах данных, таких как TreeMap

0 голосов
/ 06 января 2011

Возможно, вы захотите переопределить функцию сравнения по умолчанию для String своей собственной.

Поскольку это может испортить сравнение других строк, я рекомендую определить класс NumericString, который содержит String и реализует Comparable, и использовать его вместо String в вашей карте.

...