java List中元素按照拼音排序

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

代码如下:

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

    //获取商户list集合
    List> devParamList = xxxxService.queryList();

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

9月28日更新

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

导入依赖

 
        com.belerweb
        pinyin4j
        2.5.0

工具方法实现

 public void sortListByPinyin(List> 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中元素按照拼音排序)