1. 程式人生 > >利用List的sort方法,自定義比較器對類屬性進行排序

利用List的sort方法,自定義比較器對類屬性進行排序

JDK1.8之後,List新增了sort方法,使用Comparator作為引數,呼叫者可自定義比較規則。

	    User user1 = new User(12, "張三");
		User user2 = new User(10, "李四");
		User user3 = new User(13, "王五");
		User user4 = new User(9, "小六");
		
		List<User> list = new ArrayList<>();
		
		list.add(user1);
		list.add(user2);
		list.add(user3);
		list.add(user4);
		System.out.println(Arrays.toString(list.toArray()));
		list.sort(new Comparator<User>() {
			@Override
			public int compare(User o1, User o2) {
				//比較byte,short, int型
				//return o1.getAge().compareTo(o2.getAge());
				
				//compareTo()方法在對字串進行比較時,比較的是Unicode碼,並不能對漢字進行準確的排序,所以漢字比較時會出現比較混亂的結果。
				//對於英文字元,是比較的ASCII碼,得出的結果是正常的
				//return o1.getName().compareTo(o2.getName());   //結果不正確
				
				//解決方案:重寫compare方法
				Collator instance = Collator.getInstance(Locale.CHINA);
				return instance.compare(o1.getName(), o2.getName());
				//return o1.getName().compareTo(o2.getName());
			}
		});
		
		System.out.println(Arrays.toString(list.toArray()));

需要注意的是,如果比較中文是使用的Unicode編碼,此時,比較結果就會就會出現混亂,但Java也提供瞭解決方案。上面程式碼已經給出。 按照名稱排序: 在這裡插入圖片描述