У меня есть карта
Map<Integer, String> map = new TreeMap<Integer, String>();
map.put(21,"A");
map.put(9,"B");
map.put(23,"C");
map.put(25,"D");
Я так сортировал это
List<Integer> list = new LinkedList(map.keySet());
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1%10 - o2%10;
}
});
Map sortedMap = new LinkedHashMap();
for(Integer key: list){
sortedMap.put(key, map.get(key));
}
System.out.println(sortedMap);
Дает выход {21=A, 23=C, 25=D, 9=B}
Даже пробовал вот так
Collections.sort(list);
Set set = map.entrySet();
Map result = new LinkedHashMap();
for (Iterator it = set.iterator(); it.hasNext();) {
Map.Entry entry = (Map.Entry)it.next();
result.put(entry.getKey(), entry.getValue());
}
System.out.println(result.toString());
Еще такой же результат
Почему 9 приходит, наконец, это первая запись.
Функция сравнения сравнивает только последнюю цифру каждого номера:
@Override
public int compare(Integer o1, Integer o2) {
return o1 % 10 - o2 % 10; // a number modulo 10 yields it last digit, e.g. 25 % 10 = 5
}
});
Вы сравниваете последние цифры (21, 9, 23, 24), которые (1, 9, 3, 4). Таким образом, 9 является наибольшим числом и, следовательно, последним в списке.
Попробуй это !
List<Integer> list = new LinkedList(map.keySet());
Collections.sort(list, new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o1 - o2;
}
});
Есть ли какая-то конкретная причина для использования - %
? Который меняет порядок результата.
Это результат выше
{9=B, 21=A, 23=C, 25=D}
% 10
, вы сохраните только последнюю цифру своих чисел для сортировки. :)