如果oracle数据库的字符设置成utf-8之后,就会发现用数据库的order by column进行排序并不是按照拼音来排序的,而是按照二进制的方式来排序的,不符合国人按照首字母拼音排序的需求,我们可以在程序中对查询出来的结果进行按拼音排序。
package com.zxc.util;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.TreeMap;
public class SortHashMapByPinYin {
public static void main(String[] args) {
HashMap<String, String> map = new HashMap<String, String>();
map.put("我", "我");
map.put("你", "你");
map.put("它", "它");
map.put("阿强", "阿强");
map.put("阿平", "阿平");
map.put("阿宝", "阿宝");
map.put("老板", "老板");
map.put("程序员", "程序员");
Map<String, String> resultMap = sortHashMap(map);
System.out.println(resultMap);
}
/**
* 功能描述:按拼音对HashMap中的key进行排序
*/
public static Map<String, String> sortHashMap(
HashMap<String, String> hashMap) {
Map<String, String> resultMap = Collections
.synchronizedMap(new LinkedHashMap<String, String>());
TreeMap<String, String> sorted_map = new TreeMap<String, String>(
new Comparator<String>() {
public int compare(String arg0, String arg1) {
String s1 = "";
String s2 = "";
try {
s1 = new String(arg0.getBytes("gbk"),
"ISO-8859-1");
s2 = new String(arg1.getBytes("gbk"),
"ISO-8859-1");
} catch (Exception e) {
e.printStackTrace();
}
return s1.compareTo(s2);
}
});
sorted_map.putAll(hashMap);
for (String key : sorted_map.keySet()) {
resultMap.put(key, sorted_map.get(key));
}
return resultMap;
}
}
输出结果:{阿宝=阿宝, 阿平=阿平, 阿强=阿强, 程序员=程序员, 老板=老板, 你=你, 它=它, 我=我}