【Java】集合对象按照指定属性排序(比如姓名拼音排序)

最近项目里需要对集合中的对象按照name属性排序,要求name属性按照字母排序后,返回集合结果,下面是实现方式:

  1. 首先要实现排序的对象要实现Comparable接口,重写该类的compareTo方法,方法里写明要比较的属性,代码如下:

    ```
    package com.longcloud.oapm.portal.experience.vo;
    import javax.persistence.Column;
    import java.util.Comparator;
    import java.util.List;
    public class PersonChartUserVo implements Comparable{
        /**
         * 人员姓名+工号
         */
        private String nameInfo;
        /**
         * 人员id
         */
        @Column(name = "user_id")
        private Integer userId;
        /**
         * 所属部门
         */
        private String orgnization;
        /**
         * 人员的项目集合
         */
        private List projectVos;
    
        public String getOrgnization() {
            return orgnization;
        }
    
        public void setOrgnization(String orgnization) {
            this.orgnization = orgnization;
        }
    
        public String getNameInfo() {
            return nameInfo;
        }
    
        public void setNameInfo(String nameInfo) {
            this.nameInfo = nameInfo;
        }
    
        public Integer getUserId() {
            return userId;
        }
    
        public void setUserId(Integer userId) {
            this.userId = userId;
        }
    
        public List getProjectVos() {
            return projectVos;
        }
    
        public void setProjectVos(List projectVos) {
            this.projectVos = projectVos;
        }
     /**
         * Comparable类compareTo方法重写
         * @param o
         * @return
         */
        @Override
        public int compareTo(PersonChartUserVo o) {
            return this.nameInfo.compareTo(o.getNameInfo());
        }
    }
    ```
    
  2. 对需要排序的集合进行排序,将集合传入下面的方法里:

    ```
    Collections.sort(results, new Comparator() {
                @Override
                public int compare(PersonChartUserVo o1, PersonChartUserVo o2) {
                    //注意:按照中文拼音排序要进行下面的设置
                    Comparator com = Collator.getInstance(Locale.CHINA);
                    return ((Collator) com).compare(o1.getNameInfo(),o2.getNameInfo());
                }
            });
    ```
      
       
  3. 这样返回的结果就会按照PersonChartUserVo对象的nameInfo属性进行排序。

  4. 你可能感兴趣的:(Java学习笔记)