2014-11-22 116 views
0

我在理解和使用比较器时遇到问题我被问到以下问题:比较器实现

创建一个CompanyDataBase类。

public java.util.ArrayList sortByName()您需要为此使用Comparator对象。

我在班上写了这个方法。

 @Override 
    public int sortByName(Employee name1, Employee name2) 
    { 
     return (int) (name1.super.getName() - name2.super.getName()); 
    } 

而这种单独的比较等级:

进口的java.util。*;

public class EmployeeNameComparator implements Comparator<Employee> 
{ 


    public int compare(Employee first, Employee second) 
    { 
     return (int) (first.super.getName() - second.super.getName()); 
    } 

} 

但我显然不会是使用相同的 “回报(INT)(name1.super.getName() - name2.super.getName());”这两个类的代码行......但我不知道如何在sortByName方法中实现它。

我在一个单独的Employee类中使用compareTo Comparator接口来调用Comparator对象的重载使用。

任何帮助,建议,代码行将非常感谢!

回答

2

字符串不是原语,不能使用减法。

使用字符串的可比界面做了这个工作

public int compare(Employee first, Employee second) 
{ 
    return first.getName().compareTo(second.getName()); 
} 
+0

感谢您的回应。你的意思是我在比较器中的方法应该如下所示:'public int compare(Employee first,Employee second) { return first.super.getName()。compareTo(second.super.getName()); - }' – Mark 2014-11-22 16:32:05

+0

是的,这是正确的 – MeBigFatGuy 2014-11-22 16:33:27

+0

谢谢,感谢! :) – Mark 2014-11-22 16:35:47

0

你比较两个字符串...所以你可以(如果它们不为空),这样做:

name1.compareTo(name2); 

现在你需要考虑到空值......所以你的比较器看起来像这样:

public class EmployeeNameComparator implements Comparator<Employee> 
{ 
    public int compare(Employee first, Employee second) 
    { 
     if (first != null && second != null) { 
      if (first.getName() != null) { 
       return first.getName().compareTo(second.getName()); 
      } 
     } 
.. other cases here 


    } 
} 
+0

谢谢..我会用我的比较器的这个方法来覆盖所有的基础..并在学习练习中尝试完全理解代码的实现(全新的东西继承,多态性,接口等。痛苦的学习经历!!) – Mark 2014-11-22 16:46:53