Если вы знаете, что ваши значения уникальны, вы можете использовать Guava's BiMap (двунаправленная карта) для хранения данных. Создайте HashBiMap
так же, как ваш HashMap
, затем создайте новый TreeMap
из его инверсии:
new TreeMap<>(biMap.inverse());
Эта карта будет затем отсортирована по значениям. Помните, что то, что вы называете «ключами» и «ценностями», поменяется местами.
Если ваши значения не являются уникальными, вы можете создать мультикарту обратного. Мультикарта - это, по сути, отображение каждого ключа на одно или несколько значений. Обычно это делается путем создания карты из ключа к списку. Вам не обязательно делать это, потому что Google сделал это для вас. Просто создайте мультикарту из вашей существующей карты и попросите Guava инвертировать ее для вас в TreeMultimap
, который, как вы можете догадаться, представляет собой TreeMap
, который может содержать несколько значений на ключ.
Multimaps.invertFrom(Multimaps.forMap(myMap), new TreeMultimap<V, K>());
Предоставляется многокарточная документация.