Java List集合 實體類按漢字拼音排序


本文介紹兩種方式,方式一比較簡便,只需要實現Comparable接口,復寫compareto方法,方法二需要添加pinyin4j-2.5.0.jar包

Java List集合 實體類按漢字拼音排序   方式一

java中List是有序的,集合的元素是按照添加順序排序的,但在實際開發過程中,有可能需要對其內容進行排序,下面是list集合 元素實體類按照漢字拼音排序

首先需要排序的對象需要實現Comparable接口並且並復寫compareto方法:

package demo;

public class User implements Comparable<User>{
    private String name; //姓名

    private int age; // 年齡
    
    
    public User(String name, int age) {
        this.name = name;
        this.age =age;
    }
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    
    public String toString() {
        return "[name=" + name + ", age=" + age + "]";
    }
    
    
    //復寫compareto方法
    public int compareTo(User name) {
        // TODO 自動生成的方法存根
        return this.name.compareTo(name.getName());
    }

}

調用方法,對集合中的實體類按漢字首字母排序

 public static void main(String[] args) throws UnsupportedEncodingException {
    

    List<User> list = new ArrayList<User>();
    list.add(new User("張三", 5));
    list.add(new User("張三", 6));
    list.add(new User("張三", 7));
    list.add(new User("李四", 30));
    list.add(new User("安安", 30));
    list.add(new User("王五", 19));
    list.add(new User("陳十七", 17));
    list.add(new User("弟弟", 17));
    list.add(new User("陳十七", 10));
  System.out.println(list.toString());
  //Collections工具類的sort()方法對list集合元素排序   Collections.sort(list,
new Comparator<User>() {   public int compare(User info1, User info2) {     //獲取中文環境   Comparator<Object> com = Collator.getInstance(java.util.Locale.CHINA);   return com.compare(info1.getName(), info2.getName());   }   });   System.out.println(list); }

結果打印:

 

 

Java List集合 實體類按漢字拼音排序   方式二

需要添加jar包:pinyin4j-2.5.0.jar

下載地址:http://sourceforge.net/projects/pinyin4j/

代碼:

        List<User> list = new ArrayList<User>();
        list.add(new User("張三", 5));
        list.add(new User("張三", 6));
        list.add(new User("張三", 7));
        list.add(new User("李四", 30));
        list.add(new User("安安", 30));
        list.add(new User("王五", 19));
        list.add(new User("陳十七", 17));
        list.add(new User("弟弟", 17));
        list.add(new User("陳十七", 10));
    Collections.sort(list,new Comparator<User>() {
        public int compare(User s1, User s2) {
            String o1 = s1.getName();
            String o2 = s2.getName();
            for (int i = 0; i < o1.length() && i < o2.length(); i++) {
     
            int codePoint1 = o1.charAt(i);
            int codePoint2 = o2.charAt(i);
     
            if (Character.isSupplementaryCodePoint(codePoint1)
                || Character.isSupplementaryCodePoint(codePoint2)) {
            i++;
            }
     
            if (codePoint1 != codePoint2) {
            if (Character.isSupplementaryCodePoint(codePoint1)
                || Character.isSupplementaryCodePoint(codePoint2)) {
                return codePoint1 - codePoint2;
            }
     
            String pinyin1 = PinyinHelper.toHanyuPinyinStringArray((char) codePoint1) == null 
                    ? null : PinyinHelper.toHanyuPinyinStringArray((char) codePoint1)[0];
            String pinyin2 = PinyinHelper.toHanyuPinyinStringArray((char) codePoint2) == null 
                    ? null : PinyinHelper.toHanyuPinyinStringArray((char) codePoint2)[0];
     
            if (pinyin1 != null && pinyin2 != null) { // 兩個字符都是漢字
                if (!pinyin1.equals(pinyin2)) {
                return pinyin1.compareTo(pinyin2);
                }
            } else {
                return codePoint1 - codePoint2;
            }
            }
        }
        return o1.length() - o2.length();
        }
    }); // 按年齡排序
    
    
    System.out.println(list.toString());

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM