Java8 для сортировки значения Map в Map - PullRequest
0 голосов
/ 27 июня 2019

У меня есть карта в этом формате: Map<String, Map<Integer, Long>> и содержание как

{BCD={321=2}, ABC={123=1}, DEF={798=3}, CDE={564=1, 456=1}, GHI={908=2}}`

Можно ли отсортировать значения Long в обратном порядке, затем String и Integer?

1 Ответ

1 голос
/ 27 июня 2019

Нет.Вы не можете сортировать содержимое Map.

. Сортировка возможна только по тем вещам, которые сохраняют сортировку, например List, TreeMap или TreeSet.

.Map содержимое для сортировки, просто реализуйте Comparator (например, Comparator<Map.Entry<String, Map<Integer, Long>>>), который способен возвращать целое число, представляющее порядок двух записей, и подавать все содержимое вашего Map в List<Map.Entry<String, Map<Integer, Long>>>, которыйзатем могут быть отсортированы.

   private static final Comparator<Map.Entry<String, Map<Integer, Long>>> COMPI = new Comparator<>() {
          @Override
          public int compare(Map.Entry<String, Map<Integer, Long>> obj1,
               Map.Entry<String, Map<Integer, Long>>(obj2)) {
                   ... return 0, if obj1 equal to obj2
                   ... return 1, if obj1 lower than obj2
                   ... return -1, if obj1 greater than obj2
          }

          public static List<Map.Entry<String, Map<Integer, Long>>> sortMyMap(Map<String, Map<Integer, Long>> myMap) {
                List<Map.Entry<String, Map<Integer, Long>>> l = new java.util.ArrayList<>(myMap.entrySet());
                Collections.sort(l, COMPI);
                return l;
           }
}

Самым сложным будет правильно реализовать компаратор ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...