List集合按元素的属性排序 可以对中文进行排序

        今天需要对一个集合List进行排序,按元素中的name属性,name中保存的是中文,但是在网上找了好多资料,都写最简单的compareTo,就觉得问题解决了!但是我自己试验发现,最简单的compateTo对数字,字母是能起到排序的效果,但是根本不能对中文进行排序,代码如下:

(朋友们,个人觉得,任何一个问题肯定有多方面,并不是简单解决了表面的问题就可以的,所以在分享知识的同时,尽可能将所有可能都列出来,避免新手走进误区)

	public static void main(String[] args) {
		List<TFriendBean> list = new ArrayList<TFriendBean>();
		TFriendBean friend1 = new TFriendBean();
		friend1.setDoctorId(1);
		friend1.setDoctorName("张三");
		TFriendBean friend2 = new TFriendBean();
		friend2.setDoctorId(2);
		friend2.setDoctorName("李四");
		TFriendBean friend3 = new TFriendBean();
		friend3.setDoctorId(3);
		friend3.setDoctorName("王五");
		TFriendBean friend4 = new TFriendBean();
		friend4.setDoctorId(4);
		friend4.setDoctorName("啊赵六");
		TFriendBean friend5 = new TFriendBean();
		friend5.setDoctorId(5);
		friend5.setDoctorName("啊华");
		TFriendBean friend6 = new TFriendBean();
		friend6.setDoctorId(6);
		friend6.setDoctorName("八阿哥");
		list.add(friend1);
		list.add(friend2);
		list.add(friend3);
		list.add(friend4);
		list.add(friend5);
		list.add(friend6);
		System.out.println("----------排序前结果----------");
		for (TFriendBean bean : list) {
			System.out.println(bean.getDoctorName());
		}

		Collections.sort(list, new  Comparator<Object>(){
			@Override
			public int compare(Object o1, Object o2) {
				TFriendBean bean1 = (TFriendBean) o1;
				TFriendBean bean2 = (TFriendBean) o2;
				return bean1.getDoctorName().compareTo(bean2.getDoctorName());
			}
			
		});
		System.out.println("----------排序后结果----------");
		for (TFriendBean bean : list) {
			System.out.println(bean.getDoctorName());
		}
	}
----------排序前结果----------
张三
李四
王五
啊赵六
啊华
八阿哥
----------排序后结果----------
八阿哥
啊华
啊赵六
张三
李四
王五

事实上没有达到排序的效果,经过半天的查资料,代码做如下修改:

	public static void main(String[] args) {
		List<TFriendBean> list = new ArrayList<TFriendBean>();
		TFriendBean friend1 = new TFriendBean();
		friend1.setDoctorId(1);
		friend1.setDoctorName("张三");
		TFriendBean friend2 = new TFriendBean();
		friend2.setDoctorId(2);
		friend2.setDoctorName("李四");
		TFriendBean friend3 = new TFriendBean();
		friend3.setDoctorId(3);
		friend3.setDoctorName("王五");
		TFriendBean friend4 = new TFriendBean();
		friend4.setDoctorId(4);
		friend4.setDoctorName("啊赵六");
		TFriendBean friend5 = new TFriendBean();
		friend5.setDoctorId(5);
		friend5.setDoctorName("啊华");
		TFriendBean friend6 = new TFriendBean();
		friend6.setDoctorId(6);
		friend6.setDoctorName("八阿哥");
		list.add(friend1);
		list.add(friend2);
		list.add(friend3);
		list.add(friend4);
		list.add(friend5);
		list.add(friend6);
		System.out.println("----------排序前结果----------");
		for (TFriendBean bean : list) {
			System.out.println(bean.getDoctorName());
		}

		Collections.sort(list, new  Comparator<Object>(){
			Collator collator = Collator.getInstance(java.util.Locale.CHINA);
			@Override
			public int compare(Object o1, Object o2) {
				TFriendBean bean1 = (TFriendBean) o1;
				TFriendBean bean2 = (TFriendBean) o2;
				return collator.getCollationKey(bean1.getDoctorName()).compareTo(collator.getCollationKey(bean2.getDoctorName()));
			}
			
		});
		System.out.println("----------排序后结果----------");
		for (TFriendBean bean : list) {
			System.out.println(bean.getDoctorName());
		}
	}
重点关注:
Collator collator = Collator.getInstance(java.util.Locale.CHINA);
return collator.getCollationKey(bean1.getDoctorName()).compareTo(collator.getCollationKey(bean2.getDoctorName()));

----------排序前结果----------
张三
李四
王五
啊赵六
啊华
八阿哥
----------排序后结果----------
啊华
啊赵六
八阿哥
李四
王五
张三
发现这次的排序结果正确了

大神有意见的话,欢迎随时交流.


莫言今生  --2015-8-5 17:35记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值