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
相关产品推荐
相关产品推荐

