중 영문 혼합 이니셜 순 으로 정렬

3415 단어 Java
예전 에 외국 자본 에서 중국어 순 서 를 언급 하지 않 았 는데 현재 한 가지 수 요 는 중국어 이니셜 에 따라 순 서 를 매 겨 야 하고 영어 도 혼합 되 어야 한다.
제3자 가방 을 사 용 했 습 니 다.
 
            com.belerweb
            pinyin4j
            2.5.1
 
    

세 가지 방법 을 봉 했다.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 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 list = new ArrayList(map.values());
        List 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 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 result = new ArrayList(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

좋은 웹페이지 즐겨찾기