Я пытался использовать SortedMap
с настроенным компаратором в одном из моих весенних проектов.Это SortedMap, где я пытаюсь отсортировать по второй половине строки (которая является ключом).Пример ключа «А: 123».
Я добавил настраиваемый компаратор, чтобы убедиться, что SortedMap идет по целочисленному порядку вместо строкового.
Вот упрощенный пример кода, у меня есть класс с SortedMap внутри:
class TestObject{
private SortedMap<String, String> myMap = new TreeMap<String, String>({
new Comparator<String>()
{
@Override
public int compare(String s1, String s2)
{
int m1 = Integer.parseInt(O1.split(":")[1]);
int m2 = Integer.parseInt(O2.split(":")[1]);
return m1- m2;
}
});
void setMap(SortedMap<String, String> maps){
myMap = maps;
}
void getMap(){ return myMaps; }
}
И внутри моей основной функции я сделал:
class UpperClass{
@Autowired
TestObject object1;
public setNewMap(){
SortedMap<String, String> myInput = new TreeMap<String, String>({
//my comparator
});
myInput.put("A:10000", "XXX");
myInput.put("A:500","XXX");
myInput.put("A:200","XXX");
object1.setMap(myInput);
}
pubic getResult(){
SortedMap<String, String> result = object1.getMap();
}
}
Итак, я удаленно отлаживаю свое приложение.Похоже, что компаратор внутри определения класса никогда не вызывался.Я печатаю построчно, и myInput поддерживает порядок строки при выводе:
A:200
A:500
A:10000
Однако, когда мое приложение вызывает Result, оно выводит:
A:10000
A:200
A:500
, чтопорядок символов.Поэтому мне интересно, сделал ли я что-то не так, поместив компаратор в определение класса.