天天看点

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记录

继续阅读