Как в отсортированной карте вывести только первые n значений? HashMap
Кусок кода, отвечающий за сортировку карты не очень понятен мне, как работать с ним, как указать на индекс отсортированного элемента:
map.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.forEach(System.out::println);
Ответы (2 шт):
Автор решения: Andrew
→ Ссылка
Размер после сортировки задается через метод .limit(Integer count):
List<MyKeyType> lst = map.entrySet().stream()
.map(Map.Entry::getKey)
.sorted()
.limit(10)
.collect(Collectors.toList());
ну и дальше получить элемент по индексу:
lst.get(Integer list)
вот есть туториал по работе с List.
Автор решения: Artem Gatchenko
→ Ссылка
Вариант, который сохраняет отсортированную карту в список — чтобы можно было обращаться по индексу:
List<Map.Entry<String, Integer>> sortedList = map.entrySet().stream()
.sorted(Map.Entry.comparingByValue(Comparator.reverseOrder()))
.collect(Collectors.toList());
Теперь ты можешь, например:
Map.Entry<String, Integer> third = sortedList.get(2); // Индексация с 0
System.out.println("3-е место: " + third.getKey() + " -> " + third.getValue());