Если вы хотите отсортировать Map
на основе значений, используйте Entry.comparingByValue()
, а затем соберите их в LinkedHashMap
:
Map<String,Integer> result = map.entrySet()
.stream()
.sorted(Entry.comparingByValue())
.collect(Collectors.toMap(Entry::getKey, Entry::getValue, (a,b) -> b, LinkedHashMap::new));
В Java-8 имеется три перегруженныхtoMap
метод, описанный выше с 4 параметрами, которые
public static <T,K,U,M extends Map<K,U>> Collector<T,?,M> toMap(Function<? super T,? extends K> keyMapper,
Function<? super T,? extends U> valueMapper,
BinaryOperator<U> mergeFunction,
Supplier<M> mapSupplier)
Параметры:
keyMapper - функция отображения для создания ключей
valueMapper - функция отображения для получения значений
mergeFunction - функция слияния, используемая для разрешения коллизий между значениями, связанными с одним и тем же ключом, которые передаются в Map.merge (Object, Object, BiFunction)
mapSupplier - функция, которая возвращает новую пустую карту, в которую будут вставлены результаты