#java #sorting
#java #сортировка
Вопрос:
У меня есть карта
Map<String, Set<String>> map
Я хотел бы написать функцию, которая возвращает список, List<String>
который сортирует карту по размеру набора значений каждого ключа. Элемент в списке должен быть ключами карты. Каков наилучший способ сделать это?
Я знаю, что могу использовать set.size (), но как мне сохранить отношение размера набора к соответствующей ключевой строке?
Комментарии:
1. Чему соответствует одна запись в желаемом списке вывода?
2. Речь идет о реализации алгоритма сортировки или использовании утилит java collections для достижения того же?
Ответ №1:
Вы можете достичь этого таким образом, используя Stream API:
List<String> sortedKeys = map.entrySet().stream()
.sorted((a, b) -> Integer.compare(a.getValue().size(), b.getValue().size()))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
Ответ №2:
Ответ Frostbit довольно правильный, но вместо этого вы могли бы использовать comparingByValue():
List<String> sortedKeys = map.entrySet().stream()
.sorted((a, b) -> Integer.comparingByValue(a.size(),b.size())) //getValue() removed
.map(Map.Entry::getKey)
.collect(Collectors.toList());