今天需要對一個集合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記錄