天天看點

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記錄

繼續閱讀