美文网首页
java List中元素按照拼音排序

java List中元素按照拼音排序

作者: Angle_洛熙 | 来源:发表于2020-09-28 11:06 被阅读0次

    项目中遇到需要对list结果集属性按照中文拼音排序场景。

    代码如下:

    在controller中,获取到devParamList后做如下处理:

        //获取商户list集合
        List<Map<String, Object>> devParamList = xxxxService.queryList();
    
        //Collections工具类的sort()方法对list集合元素排序 
        devParamList.sort(o1, o2) -> {
           //获取中文环境
                Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);
                 return com.compare(o1.get("name"), o2.get("name"));
                  }
              });
    

    9月28日更新

    经过测试发现上面的排序,对多音字排序不够友好, 比如校(jiao)验会按照校(xiao)验排序。
    查找资料发现,可以使用pinyin4j.jar, 是一个开源项目,可以直接当做工具类使用。
    使用如下:

    导入依赖

     <dependency>
            <groupId>com.belerweb</groupId>
            <artifactId>pinyin4j</artifactId>
            <version>2.5.0</version>
    </dependency>
    

    工具方法实现

     public void sortListByPinyin(List<Map<String, Object>> mapList) {
            mapList.sort((o1, o2) -> {
                char name1 = String.valueOf(o1.get("name")).charAt(0);
                char name2 = String.valueOf(o2.get("name")).charAt(0);
                String s1 = concatPinyinStringArray(PinyinHelper.toHanyuPinyinStringArray(name1));
                String s2 = concatPinyinStringArray(PinyinHelper.toHanyuPinyinStringArray(name2));
                return s1.compareTo(s2);
            });
        }
    
        private String concatPinyinStringArray(String[] pinyinArr) {
            StringBuilder sb = new StringBuilder();
            if (pinyinArr != null && pinyinArr.length > 0) {
                for (String s : pinyinArr) {
                    sb.append(s);
                }
            }
            return sb.toString();
        }
    

    相关文章

      网友评论

          本文标题:java List中元素按照拼音排序

          本文链接:https://www.haomeiwen.com/subject/byhkyktx.html