Сортировка Map по значению из value

259
29 апреля 2018, 22:56

Есть Map<String, Warp>. У класса Warp есть метод getVisits();

Мне нужно получить 10 наиболее посещаемых варпов (getVisits(); - количество посещений). Как это сделать правильно?

Answer 1

Ваш класс:

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()))
READ ALSO
Подгон изображения по размерам jLabel

Подгон изображения по размерам jLabel

Нужно чтобы изображение которое загружалось jLable в приняло размеры такие как сам компонент jLabel Вот код, что здесь нужно добавить?

168
Захват фокуса Recycle View

Захват фокуса Recycle View

Имеется viewpaget, он имеет 3 фрагментаНа центральном фрагменте (2) у нас есть горизонтальный кастомный recycler view с карточками

228
Как можно открыть 2Gis из своего приложения

Как можно открыть 2Gis из своего приложения

Как можно открыть 2Gis из своего приложения и сразу передать адреса(начальная точка и конечная) чтобы построить маршрут?

191
Binance API, корректные параметры getAggTrades

Binance API, корректные параметры getAggTrades

Добрый день! Хочется получить историю сделок по паре за последние 3 секундыВсе время при любых комбинациях возникает ошибка: Exception in thread "main"...

230