美文网首页
Java之——利用Comparator接口对多个排序条件进行处理

Java之——利用Comparator接口对多个排序条件进行处理

作者: WAHAHA402 | 来源:发表于2018-05-01 19:32 被阅读0次

    转载源出处

    参考:

        JAVA Comparator 接口排序用法
         JAVA Comparator 接口排序用法

    一、需求

    1. 首先级别最高的排在前面,
    2. 如果级别相等,那么按工资排序,工资高的排在前面,
    3. 如果工资相当则按入职年数排序,入职时间最长的排在前面。
      雇员对象包含级别、工资和入职年份,代码如下:
    package com.lyz.sort.bean;  
      
    import java.io.Serializable;  
      
      
    /** 
     * 雇员信息 
     * @author liuyazhuang 
     * 
     */  
    public class Employee implements Serializable {  
      
        private static final long serialVersionUID = 4775629632953317597L;  
          /** 
         * ID 
         */  
        public int id;  
        /** 
         * 级别 
         */  
        public int level;  
        /** 
         * 工资 
         */  
        public int salary;  
        /** 
         * 入职年数 
         */  
        public int year;  
      
        public int getId() {  
            return id;  
        }  
      
        public void setId(int id) {  
            this.id = id;  
        }  
      
        public int getLevel() {  
            return level;  
        }  
      
        public void setLevel(int level) {  
            this.level = level;  
        }  
      
        public int getSalary() {  
            return salary;  
        }  
      
        public void setSalary(int salary) {  
            this.salary = salary;  
        }  
      
        public int getYear() {  
            return year;  
        }  
      
        public void setYear(int year) {  
            this.year = year;  
        }  
      
        public Employee(int id, int level, int salary, int year) {  
            this.id = id;  
            this.level = level;  
            this.salary = salary;  
            this.year = year;  
        }  
    }  
    

    二、实现Comparator接口

    这里我们实现Java.util.Comparator接口,用于对雇员列表进行排序,代码如下

    package com.lyz.sort;  
      
    import java.util.Comparator;  
      
    import com.lyz.sort.bean.Employee;  
      
    /** 
     * 核心排序类 
     * @author liuyazhuang 
     * 
     */  
    public class EmpComparator implements Comparator<Employee> {  
      
        @Override  
        public int compare(Employee employee1, Employee employee2) {  
              int cr = 0;  
              //按级别降序排列  
              int a = employee2.getLevel() - employee1.getLevel();  
              if (a != 0) {  
                  cr = (a > 0) ? 3 : -1;  
              } else {  
                  //按薪水降序排列  
                  a = employee2.getSalary() - employee1.getSalary();  
                  if (a != 0) {  
                      cr = (a > 0) ? 2 : -2;  
                  } else {  
                      //按入职年数降序排列  
                      a = employee2.getYear() - employee1.getYear();  
                      if (a != 0) {  
                          cr = (a > 0) ? 1 : -3;  
                      }  
                  }  
              }  
              return cr;  
        }  
      
    } 
    

    三、验证排序结果

    下面用一个单元测试,来验证排序结果是否正确

    package com.lyz.sort.test;  
      
    import java.util.ArrayList;  
    import java.util.Collections;  
    import java.util.List;  
      
    import org.junit.Test;  
      
    import com.lyz.sort.EmpComparator;  
    import com.lyz.sort.bean.Employee;  
      
    /** 
     * 测试排序类 
     *  
     * @author liuyazhuang 
     * 
     */  
    public class SortTest {  
        @Test  
        public void sortTest() throws Exception {  
            List<Employee> employeeList = new ArrayList<Employee>() {  
                {  
                    add(new Employee(1, 9, 10000, 10));  
                    add(new Employee(2, 9, 12000, 7));  
                    add(new Employee(3, 5, 10000, 12));  
                    add(new Employee(4, 5, 10000, 6));  
                    add(new Employee(5, 3, 5000, 3));  
                    add(new Employee(6, 1, 2500, 1));  
                    add(new Employee(7, 5, 8000, 10));  
                    add(new Employee(8, 3, 8000, 2));  
                    add(new Employee(9, 1, 3000, 5));  
                    add(new Employee(10, 1, 2500, 4));  
                    add(new Employee(11, 2, 2000, 4));  
                }  
            };  
            Collections.sort(employeeList, new EmpComparator());  
            System.out.println("ID\tLevel\tSalary\tYears");  
            System.out.println("=============================");  
            for (Employee employee : employeeList) {  
                System.out.printf("%d\t%d\t%d\t%d\n", employee.getId(), employee.getLevel(), employee.getSalary(),  
                        employee.getYear());  
            }  
            System.out.println("=============================");  
        }  
    }
    

    结果如下:
















    image

















    开个玩笑,别当真














    这才是结果

    相关文章

      网友评论

          本文标题:Java之——利用Comparator接口对多个排序条件进行处理

          本文链接:https://www.haomeiwen.com/subject/ukkfrftx.html