利用List的sort方法,自定義比較器對類屬性進行排序
阿新 • • 發佈:2018-12-12
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也提供瞭解決方案。上面程式碼已經給出。 按照名稱排序: