Как отсортировать Map по values?
Есть HashMap<Integer, Integer> mostPopularFilms;
Содержит названия id и количество лайков, например:
- (1, 5)
- (2, 3)
- (3, 0)
- (4, 2)
Нужно отсортировать по значениям values, выходная структура не важна, можно поместить в List<Integer> id, то есть список: [1,2,4,3].
Ответы (1 шт):
Автор решения: Nowhere Man
→ Ссылка
Для сортировки исходной мапы по значениям и преобразования её в список следует использовать Stream API:
public static List<Integer> byLikesDesc(Map<Integer, Integer> idLikeCountMap) {
return idLikeCountMap.entrySet()
.stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
Тест:
System.out.println(byLikesDesc(Map.of(1, 5, 2, 3, 3, 0, 4, 2)));
// -> [1, 2, 4, 3]
Аналогично, можно брать поток не для элементов мапы, а для её ключей, которые можно сортировать в соответствии со значениями для данных ключей:
public static List<Integer> keysByLikesDesc(Map<Integer, Integer> idLikeCountMap) {
return idLikeCountMap.keySet()
.stream()
.sorted(Comparator.comparingInt(idLikeCountMap::get).reversed())
.collect(Collectors.toList());
}