按拼音对HashMap中的key进行排序

如果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;
	}

}

输出结果:{阿宝=阿宝, 阿平=阿平, 阿强=阿强, 程序员=程序员, 老板=老板, 你=你, 它=它, 我=我}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值