You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中Map如何按值降序排序,值重复时按键升序排序

实现方案

核心思路

通过自定义双优先级比较器完成排序:第一优先级按Map的value降序排列,当value相等时触发第二优先级,按key的自然升序排列,最终将结果存入LinkedHashMap保留排序后的顺序。

完整示例代码

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.stream.Collectors;

public class MapSortDemo {
    public static void main(String[] args) {
        Map<String, Integer> map = new HashMap<>();
        // 填充原始数据
        map.put("A", 25);
        map.put("D", 10);
        map.put("B", 15);
        map.put("E", 15);
        map.put("C", 17);

        // 排序逻辑
        Map<String, Integer> sortedMap = map.entrySet().stream()
                .sorted(Map.Entry.<String, Integer>comparingByValue().reversed()
                        .thenComparing(Map.Entry.comparingByKey()))
                .collect(Collectors.toMap(
                        Map.Entry::getKey,
                        Map.Entry::getValue,
                        (oldVal, newVal) -> oldVal,
                        LinkedHashMap::new
                ));

        // 输出结果
        sortedMap.forEach((key, value) -> System.out.println(key + " " + value));
    }
}

关键逻辑说明

  • Map.Entry.<String, Integer>comparingByValue().reversed() 定义第一排序规则,实现按值降序
  • thenComparing(Map.Entry.comparingByKey()) 定义第二排序规则,值相等时自动按键的自然升序排序
  • 收集结果时指定LinkedHashMap作为存储容器,避免哈希存储打乱排序后的顺序

运行输出

A 25
C 17
B 15
E 15
D 10

内容的提问来源于stack exchange,提问作者Compose Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 06:00:02