今天需要对一个集合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记录