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

Java中如何按HashMap值的List大小对Map进行降序排序

Java HashMap按值对应的List大小降序排序方案

前提说明

HashMap本身不保证存储顺序,排序后需使用LinkedHashMap接收结果,才能保留排序后的顺序。

Java 8及以上版本(最简实现)

import java.util.*;
import java.util.stream.Collectors;

// 你的原始Map
Map<String, List<String>> teamsPerLocation = new HashMap<>();

// 排序逻辑
Map<String, List<String>> sortedTeamsPerLocation = teamsPerLocation.entrySet().stream()
        // 按List大小降序排序,如需升序去掉reverseOrder()即可
        .sorted(Collections.reverseOrder(Map.Entry.comparingByValue(Comparator.comparingInt(List::size))))
        // 收集结果到LinkedHashMap维持顺序
        .collect(Collectors.toMap(
                Map.Entry::getKey,
                Map.Entry::getValue,
                // 冲突合并函数,此处无重复Key可直接返回旧值
                (oldVal, newVal) -> oldVal,
                LinkedHashMap::new
        ));

测试验证(匹配你给出的示例)

// 构造示例数据
teamsPerLocation.put("New York", Arrays.asList("Team1", "Team2"));
teamsPerLocation.put("Berlin", Arrays.asList("Team3", "Team4", "Team5"));
teamsPerLocation.put("Boston", Arrays.asList("Team6"));

// 遍历排序后的Map输出
for (Map.Entry<String, List<String>> entry : sortedTeamsPerLocation.entrySet()) {
    System.out.println(entry.getKey() + " -> " + entry.getValue());
}

输出结果:

Berlin -> [Team3, Team4, Team5]
New York -> [Team1, Team2]
Boston -> [Team6]

Java 7及更早版本实现

import java.util.*;

Map<String, List<String>> teamsPerLocation = new HashMap<String, List<String>>();
// 先把Entry转成List
List<Map.Entry<String, List<String>>> entryList = new ArrayList<Map.Entry<String, List<String>>>(teamsPerLocation.entrySet());
// 自定义排序
Collections.sort(entryList, new Comparator<Map.Entry<String, List<String>>>() {
    @Override
    public int compare(Map.Entry<String, List<String>> o1, Map.Entry<String, List<String>> o2) {
        // 降序排序,交换o1和o2的位置就是升序
        return Integer.compare(o2.getValue().size(), o1.getValue().size());
    }
});
// 转成有序的LinkedHashMap
Map<String, List<String>> sortedTeamsPerLocation = new LinkedHashMap<String, List<String>>();
for (Map.Entry<String, List<String>> entry : entryList) {
    sortedTeamsPerLocation.put(entry.getKey(), entry.getValue());
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 09:36:02