美文网首页
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接口对多个排序条件进行处理

    转载源出处 参考: JAVA Comparator 接口排序用法 JAVA Comparator 接口排序用法 ...

  • Java8中的排序

    类 Comparator Java8 中支持输入一个Comparator进行排序。 用法: Comparator....

  • Comparator 之于排序

    java里面常用的排序接口时Arrays.sort(T[], Comparator)接口,该方法在java7及an...

  • Java8 - 对集合排序

    对List进行排序 当我们需要对集合的元素进行排序的时候,可以使用java.util.Comparator 创建一...

  • Java Comparator和Comparable

    java基础回顾:排序接口 - Comparator Comparable 需求:将Bean 按照给定的字符串顺...

  • JavaTips01——Java自定义比较的实现

    参考文章 java基础__comaprable和comparator的区别 TreeSet之定制排序和自然排序 场...

  • List中的Sort

    基本用法 实现了List接口的容器,通过以下方法对其中的元素进行排序 需要传入一个实现了Comparator接口的...

  • Java8 Comparator 排序方法

    Java8 中 Comparator 接口提供了一些静态方法,可以方便于我们进行排序操作,下面通过例子讲解下如何使...

  • Java 排序

    概述 ​对Java对数组对象进行排序,Java对排序问题的处理。Java排序一般包括基础排序和Lambda Com...

  • ArrayList中的sort排序

    ArrayList中有一个sort排序方法,只要你实现了Comparator的接口,按照你自己的排序业务进行实现,...

网友评论

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

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