Java - вывести максимум пары значений ключа с пользовательской логикой - PullRequest
1 голос
/ 21 февраля 2020

Предположим, у меня есть хэш-карта с такими данными, как:

Hello - 2
Help - 2
World - 1

Я хочу иметь возможность печатать верхние 2 на основе значения, если значение одинаково для 2 объектов, то на основе ключа (по возрастанию в этом случае). Это возможно только с пользовательским comparator объектом или есть лучшие способы сделать это?

1 Ответ

2 голосов
/ 21 февраля 2020

Требование иметь два ключа сравнения делает решение нетривиальным, но, тем не менее, вы можете указать порядок сортировки, просто составив компараторы, возвращаемые вспомогательными методами, что избавит вас от необходимости писать собственную реализацию.

Ниже показана потоковая операция со встроенной компаратором, которая выполняет необходимый выбор.

List<Map.Entry<String, Integer>> result = map.entrySet().stream()
    .sorted(Map.Entry.<String, Integer>comparingByValue()
            .reversed()
            .thenComparing(Map.Entry::getKey))
    .limit(2)
    .collect(toList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...