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

Java中按Key对Map进行字母升序排序的问题求助

两种简洁的有序Map实现方案

方案1:使用TreeMap自动排序(推荐)

直接在Collectors.toMap中指定TreeMap作为结果容器,TreeMap会自动按照key的自然顺序(字符串字母升序)排序,无需额外处理:

// provinceName is key
public Map<String, String> regionMap() {
    return em.createQuery(
                """
                SELECT DISTINCT p.provinceName AS prov_id ,p.provinceAbbreviation AS prov_value
                FROM CanadianPersonalIncomeTaxRate p         
                """,
                Tuple.class
            )
            .getResultStream()
            .collect(
                Collectors.toMap(
                    tuple -> tuple.get(0, String.class),
                    tuple -> tuple.get(1, String.class),
                    // 处理key冲突(重复key时用新值覆盖旧值)
                    (existing, replacement) -> replacement,
                    // 指定结果容器为TreeMap,自动按key升序排序
                    TreeMap::new
                )
            );
}

说明:如果查询结果不会出现重复的provinceName,合并逻辑可以随意定义;TreeMap会自动完成字母升序排序,代码最简洁省心。

方案2:流排序+LinkedHashMap保留顺序

如果需要自定义排序规则,或者依赖JPQL的排序结果,可以先对流排序,再收集到LinkedHashMap中保留顺序:

// provinceName is key
public Map<String, String> regionMap() {
    return em.createQuery(
                """
                SELECT DISTINCT p.provinceName AS prov_id ,p.provinceAbbreviation AS prov_value
                FROM CanadianPersonalIncomeTaxRate p         
                """,
                Tuple.class
            )
            .getResultStream()
            // 按provinceName字母升序排序,可自定义排序逻辑(比如忽略大小写)
            .sorted(Comparator.comparing(tuple -> tuple.get(0, String.class)))
            .collect(
                Collectors.toMap(
                    tuple -> tuple.get(0, String.class),
                    tuple -> tuple.get(1, String.class),
                    (existing, replacement) -> replacement,
                    // 指定LinkedHashMap保留流的排序顺序
                    LinkedHashMap::new
                )
            );
}

说明:如果JPQL已经添加了ORDER BY p.provinceName ASC,可以省略流的sorted步骤,直接收集到LinkedHashMap也能保留查询的排序结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 17:23:10