Есть Map<String, Warp>.
У класса Warp есть метод getVisits();
Мне нужно получить 10 наиболее посещаемых варпов (getVisits(); - количество посещений). Как это сделать правильно?
Ваш класс:
class Warp implements Comparable<Warp> {
private int visits;
public Warp(int visits) {
this.visits = visits;
}
// getters & setters
@Override
public int compareTo(@NotNull Warp o) {
return this.visits - o.visits;
}
@Override
public String toString() {
return "Warp{" +
"visits=" + visits +
'}';
}
}
Создаём и заполняем map:
Map<String, Warp> map = new HashMap<>();
for (int i = 100; i > 0; i--) {
map.put("test_" + i, new Warp(i));
}
Если вывести map в консоль:
{test_39=Warp{visits=39}, test_38=Warp{visits=38}, test_37=Warp{visits=37}, ..., test_86=Warp{visits=86}, test_85=Warp{visits=85}, test_84=Warp{visits=84}, test_83=Warp{visits=83}}
Сортируем и собираем в список:
List<Warp> list = map.entrySet().stream()
.sorted(Map.Entry.comparingByValue())
.map(Map.Entry::getValue)
.limit(10)
.collect(Collectors.toList());
Выводим list в консоль:
[Warp{visits=1}, Warp{visits=2}, Warp{visits=3}, Warp{visits=4}, Warp{visits=5}, Warp{visits=6}, Warp{visits=7}, Warp{visits=8}, Warp{visits=9}, Warp{visits=10}]
В вашем случае нужен обратный порядок сортировки:
.sorted(Collections.reverseOrder(Map.Entry.comparingByValue()))
Сборка персонального компьютера от Artline: умный выбор для современных пользователей