如何实现比较器

时间:2013-06-14 20:09:22

标签: java

我将以下代码作为家庭作业。我被要求为员工对象实施比较器。 compare方法返回一个int。但是,如果您比较它们,我在employee类中的方法都不会返回int。谁能给我一些关于比较方法应该如何工作的指导?谢谢

import java.util.*;
import java.io.*;
public class EmployeeClient
{
//A Comparator for Employees
// Primary key   : Employee category - Salaried > Weekly > Daily
// Secondary key : Employee gross pay
private static class EmployeeComparator implements Comparator
{
  public int compare(Object one, Object two)
  {   
      Employee uno = (Employee) one;
      Employee dos = (Employee) two;

  }
}

public abstract class Employee {

private String idNumber;
private double payRate;

//Accessor: Return the id number of employee
public String getidNumber()
{
    return idNumber;
}

//Accessor: Return the payrate of the employee
public double getpayRate()
{
    return payRate;
}

public String toString()
{
    return getidNumber()+" "+getpayRate();
}

public abstract double grossPay();

}

3 个答案:

答案 0 :(得分:3)

我建议您查看this link

自定义比较器的目标是获取两个对象并确定它们之间的关系。认为这是一个订购问题。说我有两个装有红色和蓝色大理石的袋子。如果我想用蓝色弹珠比较袋子,就像要求哪个袋子里面有更多/更少的蓝色弹珠一样。

比较函数的返回值确定哪个对象的值高于另一个。在比较两个对象后,让ret为值。

  • ret > 0表示左侧对象的值高于右侧
  • ret < 0表示正确的对象的价值高于左侧
  • ret == 0表示两个对象的值相同

希望这有帮助。

修改

如果您不允许或无法修改Employee类,请在第一组代码中的比较函数中进行比较。例如,如果您想比较两个整数int aint b,您可以这样做:

a.compareTo(b)

Integer.compare(a, b)

  • 如果a > b:任何一种方法都会返回大于0
  • 的值
  • 如果a < b:任一方法都会返回小于0
  • 的值
  • 如果a == b:任何一种方法都会返回0

只需将此想法应用于您的代码

即可

答案 1 :(得分:0)

实际上,在比较时,Employee类中的所有字段都会返回整数。

此外,每个Employee方法返回一个对象,可以使用 compareTo()进行比较以返回int。

您的Employee类有两个字段:

String idNumber;
double payRate;

StringDouble(double的对象形式)都有一个返回int的 compareTo()方法。

所以...你的 EmployeeComparator.compare()方法可以简单地返回:

one.getidNumber().compareTo(two.getidNumber());

以下是重写Comparator类的方法:

private static class EmployeeComparator implements Comparator<Employee>
{
  public int compare(Employee empOne, Employee empTwo)
  {   
      return empOne.getidNumber().compareTo(empTwo.getidNumber());
  }
}

上面的比较器严格按照员工身份号码进行比较。

但是......应该明白如何修改它以考虑其他领域。

答案 2 :(得分:-2)

那么它总是取决于你想要排序的属性。对于像这样的通用实体,我会建议它的内部id。但是:Employee类的设计实际上很差。 getIdNumber()应该返回int而不是String。如果你可以重新设计课程,那就去做吧!如果不使用Integer.parseInt()解析字符串,那么你将有一个用于比较的int。