у меня
Map<String,LongAdder>
и я хочу отсортировать по значению лучший способ в потоках. Это сложнее, чем с Long, потому что LongAdder не реализует Comparable, поэтому я должен использовать longValue (или intValue, если для компаратора используется вычитание).
Я знаю, что могу использовать
m.entrySet().stream().sorted((a, b) -> b.getValue().intValue() - a.getValue().intValue())
но я на самом деле хочу также отсортировать по ключу (String). Я тоже поменяю местами.
Я хочу сделать
m.entrySet().stream().sorted(
Comparator.comparing((a, b) -> b.getValue().intValue() - a.getValue().intValue()))
, чтобы потом я мог связать больше компараторов с помощью thenComparing ()
Исключение составляет
Lambda expression's signature does not match the signature of the functional interface method apply(T)
Но даже если объявить отдельный компаратор, это не сработает:
Comparator<Map.Entry<String,LongAdder>> byCount = Comparator.comparing((a,b) ->
(b.getValue().intValue() - a.getValue().intValue()));
Lambda expression's signature does not match the signature of the functional interface method apply(T)
Я не могу использовать функциональную ссылку "::", потому что в ней слишком много частей: Map.Entry.getValue (). IntValue ().