Сортировка Map на Java

127
08 марта 2022, 20:10

Имеется Map и содержит такие данные

{markFV=[6, 1, 8, 90], mark01=[341, 144, 541, 501, 23]}

Как отсортировать числа по убыванию, т. е. получить такой вид:

{markFV=[90, 8, 6, 1], mark01=[541, 501, 341, 144, 23]

Если коротко, то такие данные получаются путём jsonObject.append, затем присваиваю переменной Map, JSON объект с помощью Map map3 = jsonObject.toMap(); И получаю такие данные. Остаётся отсортировать внутренние массивы.

Answer 1

Отсортировать значения в карте можно с помощью метода Arrays.sort:

Map<String, int[]> map = new HashMap<>();
map.put("markFV", new int[]{6, 1, 8, 90});
map.put("mark01", new int[]{341, 144, 541, 501, 23});
map.forEach((key, value) -> Arrays.sort(value));
// вывод
map.forEach((key, value) ->
        System.out.println(key + "=" + Arrays.toString(value)));
// markFV=[1, 6, 8, 90]
// mark01=[23, 144, 341, 501, 541]
Answer 2

если у тебя Map<String, Integer>, то очень лаконично можно отсортировать массивы вот так:

map.values().forEach(array -> Arrays.sort(array, Collections.reverseOrder()));

Если же там int, то получается менее привлекательно (извиняюсь за "изящную" сортировку, я думаю суть вопроса не в том как вы ее реализуете у себя):

for (Map.Entry<String, int[]> entry : map.entrySet()) {
    int arrLength = entry.getValue().length;
    Arrays.sort(entry.getValue());
    int[] newArr = new int[arrLength];
    for (int i = 0; i < arrLength; i++) {
        newArr[newArr.length - (i + 1)] = entry.getValue()[i];
    }
    entry.setValue(newArr);
}
READ ALSO
Пакетное выполнение sql запросов

Пакетное выполнение sql запросов

Добрый день друзья и подруги , помогите вставить addBatch()в данный код

128
ошибка при передаче JSON ответа в Java объект с помощью Jackson [закрыт]

ошибка при передаче JSON ответа в Java объект с помощью Jackson [закрыт]

Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском

194
JHipster microservices

JHipster microservices

Разбирасюь с JHipster

176
Движении кнопки по нажатию клавиши

Движении кнопки по нажатию клавиши

такое задание у меня:

118