Манипулировать картой разными способами?

Я надеюсь найти элегантный способ сортировки карты сначала по значению, а затем по ключу.

Например:

B | 50

А | 50

C | 50

E | 10

D | 100

F | 99

У меня такой код:

// Making the map into a list first
List<Map.Entry<String, Integer>> sortingList = new LinkedList<>(processMap.entrySet()); 

// Create a comparator that would compare the values of the map
Comparator<Map.Entry<String, Integer>> c = Comparator.comparingInt(Map -> Map.getValue());

// Sort the list in descending order
sortingList.sort(c.reversed());

Мне не нужно, чтобы результат снова отображался, поэтому этого достаточно, однако мой результат:

D | 100

F | 99

B | 50

А | 50

C | 50

E | 10

Я хотел бы отсортировать не только по значению, но и по ключу, чтобы результат был таким:

D | 100

F | 99

А | 50

B | 50

C | 50

E | 10

Я исследовал некоторые возможные решения, но проблема в том, что мои значения должны быть в порядке убывания, но мой ключ должен быть в порядке возрастания...

Надеюсь, что кто-нибудь может мне помочь.

1 ответ

Попробуй это:

Comparator<Map.Entry<String, Integer>> c = Comparator.comparing(Map.Entry<String, Integer>::getValue)
                                                     .reversed()
                                                     .thenComparing(Map.Entry::getKey);
Другие вопросы по тегам