Как отсортировать карту<String, установить> по другому установленному размеру

#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());