1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > 中英文混合按首字母排序

中英文混合按首字母排序

时间:2018-11-18 17:24:08

相关推荐

中英文混合按首字母排序

以前在外资不涉及到中文排序,目前滴滴有个需求是要按照中文首字母进行排序显示,还会有英文混合其中。

用到了一个第三方包。

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

封装了3个方法。可以根据list,map的key,map的value进行排序。返回类型与输入一致。

import net.sourceforge.pinyin4j.PinyinHelper;import java.util.ArrayList;import java.util.LinkedHashMap;import java.util.List;import java.util.Map;import java.util.TreeMap;public class SortByChineseUtil {public static List sort(List list) {return sortByChinese(list);}public static Map sortByKey(Map map) {ArrayList list = new ArrayList(map.keySet());List<String> sortList = sortByChinese(list);LinkedHashMap result = new LinkedHashMap();for (String str : sortList) {result.put(str, map.get(str));}return result;}public static Map sortByValue(Map map) {List<String> list = new ArrayList<String>(map.values());List<String> sortList = sortByChinese(list);LinkedHashMap result = new LinkedHashMap();for (String str : sortList) {result.put(getKey(map, str), str);}return result;}private static String getKey(Map map, String value) {for (Object key : map.keySet()) {if (map.get(key).equals(value)) {return key.toString();}}return null;}/*** 看是否是汉字,是汉字进行匹配* 看是否是英文,是英文直接转成小写加进去。* 其他则直接加* @param list* @return*/private static List sortByChinese(List<String> list) {TreeMap map = new TreeMap();String[] s = new String[list.size()];for (String str : list) {char[] chars = str.toCharArray();if (Character.toString(chars[0]).matches("[\\u4E00-\\u9FA5]+")) {String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(chars[0]);map.put(setMapKey(map,Character.toString(pinyinArray[0].charAt(0))), str);} else if (Character.toString(chars[0]).matches("[a-zA-Z]+")) {map.put(setMapKey(map,Character.toString(chars[0]).toLowerCase()), str);} else {map.put(setMapKey(map,Character.toString(chars[0])), str);}}List<String> result = new ArrayList<String>(map.values());return result;}/*** 解决key一样会覆盖的问题 */private static String setMapKey(TreeMap map,String key){if(map.get(key) == null){return key;}else{return key + key;}}}

测试

public static void main(String[] args) {HashMap map = new HashMap();map.put("2","日本");map.put("3","美国");map.put(1,"中国");map.put(77,"IT服务");map.put(8,"it");map.put(99,",");System.out.println(SortByChineseUtil.sortByValue(map));}

测试结果

{99=,, 8=it, 77=IT服务, 3=美国, 2=日本, 1=中国}进程已结束,退出代码 0

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。