当前位置: 首页 > 知识库问答 >
问题:

使用比较器接口对localdate进行排序

孔正文
2023-03-14

我正试图根据员工的加入日期对他们的列表进行排序。下面是我的员工类。

import java.time.LocalDate;

public class Employee {

    private String name;
    private String empID;
    private Designation designation;
    private LocalDate dateOfJoining;
    private int monthlySalary;

    public Employee(String name, String empID, Designation designation, LocalDate dateOfJoining, int monthlySalary) {
        super();
        this.name = name;
        this.empID = empID;
        this.designation = designation;
        this.dateOfJoining = dateOfJoining;
        this.monthlySalary = monthlySalary;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getEmpID() {
        return empID;
    }

    public void setEmpID(String empID) {
        this.empID = empID;
    }

    public Designation getDesignation() {
        return designation;
    }

    public void setDesignation(Designation designation) {
        this.designation = designation;
    }

    public LocalDate getDOJ() {
        return dateOfJoining;
    }

    public void setDOJ(LocalDate dOJ) {
        dateOfJoining = dOJ;
    }

    public int getMonthlySalary() {
        return monthlySalary;
    }

    public void setMonthlySalary(int monthlySalary) {
        this.monthlySalary = monthlySalary;
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        result = prime * result + ((dateOfJoining == null) ? 0 : dateOfJoining.hashCode());
        result = prime * result + ((designation == null) ? 0 : designation.hashCode());
        result = prime * result + ((empID == null) ? 0 : empID.hashCode());
        result = prime * result + monthlySalary;
        result = prime * result + ((name == null) ? 0 : name.hashCode());
        return result;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Employee other = (Employee) obj;
        if (dateOfJoining == null) {
            if (other.dateOfJoining != null)
                return false;
        } else if (!dateOfJoining.equals(other.dateOfJoining))
            return false;
        if (designation == null) {
            if (other.designation != null)
                return false;
        } else if (!designation.equals(other.designation))
            return false;
        if (empID == null) {
            if (other.empID != null)
                return false;
        } else if (!empID.equals(other.empID))
            return false;
        if (monthlySalary != other.monthlySalary)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }

    @Override
    public String toString() {
        return "Employee [name=" + name + ", empID=" + empID + ", designation=" + designation + ", DOJ=" + dateOfJoining
                + ", monthlySalary=" + monthlySalary + "]";
    }

}

下面是我的比较器类:

import java.time.LocalDate;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class Employecomparable {

    public static void main(String[] args) {
        List<Employee> listofemployee = new ArrayList<>();

        LocalDate date1 = LocalDate.parse("2018-09-06");
        LocalDate date2= LocalDate.of(2011, 12, 12);
        listofemployee.add(new Employee("abc", "12345", Designation.ASE,LocalDate.of(2014, 2, 15) , 20000));
        listofemployee.add(new Employee("abcd", "24680", Designation.SE, date1, 30000));
        listofemployee.add(new Employee("abcde", "13570", Designation.SSE, LocalDate.of(2013, 05, 30), 40000));
        listofemployee.add(new Employee("abcdef", "13690", Designation.TL, date2, 60000));
        listofemployee.add(new Employee("xyz", "10909", Designation.AM, LocalDate.parse("20/03/2000"), 800000));
        listofemployee.add(new Employee("koool", "89076", Designation.M, LocalDate.parse("31/01/2011"), 2000));

        Collections.sort(listofemployee, new Comparator<Employee>() {

            @Override
            public int compare(Employee emp1, Employee emp2) {
                if (emp1.getMonthlySalary() > emp2.getMonthlySalary())
                    return -1;
                else if (emp1.getMonthlySalary() < emp2.getMonthlySalary())
                    return +1;
                else
                    return 0;
            }

        });
        System.out.println(listofemployee);
        Collections.sort(listofemployee, new Comparator<Employee>(){

            @Override
            public int compare(Employee emp1, Employee emp2) {
                if(emp1.getDOJ()>emp2.getDOJ())
                    return +1;

                return 0;
            }

        });

共有1个答案

督德泽
2023-03-14

dateofjoininglocaldate,您不能通过><==进行比较。Java只支持原语(及其对象表示)上的那些数学符号。相反,您可以使用.isbefore().isafter()方法,请参见此处。

示例:

     Collections.sort(listofemployee, new Comparator<Employee>(){

            @Override
            public int compare(Employee emp1, Employee emp2) {
                if(emp1.getDOJ().isBefore(emp2.getDOJ()))
                    return +1;
                else if (emp1.getDOJ().isAfter(emp2.getDOJ)))
                    return -1
                else 
                    return 0;
            }

        });

或者:

 Collections.sort(listofemployee, new Comparator<Employee>(){

            @Override
            public int compare(Employee emp1, Employee emp2) {
                return emp1.getDOJ().compareTo(emp2.getDOJ);
            }

        });
 类似资料:
  • 问题内容: 父级是子级继承的类。由GrandChild继承。每个类都包含子类的列表(即,父类包含子类的列表,子类包含大子级的列表)。每个类包含50个属性(attrib1-atrib50)。getChildList()返回类型为Child的对象的arrayList getGrandChildList()返回类型为GrandChild的对象的arrayList 令resultSet为父级列表 现在,我

  • 本文向大家介绍对比Java中的Comparable排序接口和Comparator比较器接口,包括了对比Java中的Comparable排序接口和Comparator比较器接口的使用技巧和注意事项,需要的朋友参考一下 Comparable Comparable 是排序接口。 若一个类实现了Comparable接口,就意味着“该类支持排序”。 即然实现Comparable接口的类支持排序,假设现在存在

  • 所以我正在使用一些预先存在的比较器,它们比较两个元组中的某些值,如果第一个大于第二个,则返回true,否则返回false。这是其中之一的代码: 现在,我有一个字典,里面有许多上面比较的类型的元组条目。我想以相反的顺序对它们进行排序,但我真的不知道如何完成。我在想这样的事情: 但是我不知道向比较器传递什么,因为每个比较器都有两个参数(subInfo1、subInfo2)。我不能更改比较器函数。

  • 我有一个程序可以对计算机的某个目录中的文件进行排序。我正在使用比较器接口和Collections.Sort-方法,但我无法访问调用类的输出。我也不知道如何在Sort-class中对对象进行排序。 1)如果有人能告诉我如何使用compare-method(prototyp是:sort(List List,Comparator c)我会很高兴

  • 我需要测试的地方 有人能告诉我如何使用main中的getCompByName()按名称对ArrayList进行排序吗?我对比较器很陌生,对它们的用法很难理解。该方法返回一个比较器,所以我不确定这将如何实现。我知道我需要使用getCompByName()来排序,我只是不知道如何实现它。

  • 问题内容: 尝试根据元素字符串长度对数组进行排序时,我被编译错误震惊。我有一套开始, 我理想地想排序 所以我有一个比较器类型 然后我打电话给全班 但随后,它引发了两个编译错误: 任何解决问题的线索,我将不胜感激。 问题答案: 您需要指定一个类型参数,以使实现生效。 在Java 1.7和更高版本中,您还可以将此方法的主体简化为: 另外,对对象进行排序。由于要对数组进行排序,因此应使用: