Для начала вам нужно будет использовать экземпляр SortedMap
. Если карта не реализует этот интерфейс, то она имеет неопределенный / произвольный порядок итераций, и вы не можете управлять им. (Как правило, это так, поскольку карта - это способ связывания значений с ключами; упорядочение является вспомогательной задачей.)
Итак, я предполагаю, что вы используете TreeMap , который является реализацией канонической отсортированной карты. Это сортирует ключи в соответствии с Comparator , который вы можете указать в конструкторе Поэтому, если вы можете написать такой компаратор, который определяет, какой из двух произвольных ключей является «нижним» (предупреждение спойлера: вы можете), это будет легко реализовать.
Это, однако, будет работать только при сортировке по ключу. Я не знаю, имеет ли смысл сортировать карту по значению, и я не знаю ни одного простого способа сделать это. Лучшее, что я могу придумать, это написать Comparator<Map.Entry>
, который сортирует по значениям, вызвать Map.getEntrySet
и поместить все записи в список, а затем вызвать Collections.sort
в списке. Он не очень элегантный или эффективный, но он должен выполнять свою работу, если производительность не является вашей главной задачей.
(Обратите также внимание, что если ваши ключи не являются неизменяемыми, вы столкнетесь с большим количеством проблем, поскольку они не будут восстановлены при внешнем изменении.