Я думаю, что я спрашиваю: могу ли я получить Map.Entry, переданный компаратору?
Переведено автоматически
Ответ 1
Вы не можете использовать TreeMap саму сортировку по значениям, поскольку это противоречит SortedMap спецификации:
Map Который дополнительно обеспечивает общий порядок для своих ключей.
Однако, используя внешнюю коллекцию, вы всегда можете выполнить сортировку Map.entrySet() по своему усмотрению, либо по ключам, значениям, либо даже по комбинации (!!) того и другого.
Вот универсальный метод, который возвращает a SortedSet of Map.Entry, учитывая a, Map значения которогоComparable:
System.out.println(map); // prints "{A=3, B=2, C=1}" System.out.println(entriesSortedByValues(map)); // prints "[C=1, B=2, A=3]"
Обратите внимание, что при попытке изменить либо SortedSet саму карту, либо Map.Entry внутри нее произойдет странная вещь, потому что это больше не "вид" исходной карты, как entrySet() есть.
Вообще говоря, необходимость сортировать записи карты по ее значениям нетипична.
Примечание о == для Integer
Ваш исходный компаратор сравнивает, Integer используя ==. Это почти всегда неправильно, поскольку == с Integer операндами является равенство ссылок, а не равенство значений.
System.out.println(newInteger(0) == newInteger(0)); // prints "false"!!!