private class myComparator implements Comparator<Object>{
@Override
public int compareTo(Object obj1, Object obj1) {
if ((obj1.getNumber() - obj2.getNumber()) == 0) {
return 0;
}
if ((obj1.getNumber() > obj2.getNumber()) {
return 1;
}
return -1;
}
嘿我不知道如何在我正在实现的Comparator类中实现这个compareTo方法。我正在尝试比较两个对象的整数值,以升序。但我真的不确定我要去哪里
稍后,我将在另一个类中将此类称为collections.sort(someList,myComparator)。
答案 0 :(得分:1)
首先,Comparator
需要compare
方法,而不是compareTo
。由于您的类实现了Comparator<Event>
,因此该方法的参数应为Event
s。
private class myComparator implements Comparator<Event>
{
@Override
public int compare(Event obj1, Event obj1) {
if (obj1 == null) {
if (obj2 == null) {
return 0;
} else {
return 1;
}
} else if (obj2 == null) {
return -1;
}
return obj1.getNumber().compareTo(obj2.getNumber());
}
}
请注意,我假设getNumber()
永远不会返回null。如果它可以返回null,则需要更多的空检查。
答案 1 :(得分:1)
比较器接口没有 compareTo 方法。它改为比较方法。 第二件事,既然你是Comparator,那就是使用事件类型类/接口,将方法签名改为:
public int compare(Event obj1,Event obj2){
}
一般规则,如果两个对象相等则返回0,如果第一个对象大于第二个[在比较逻辑中]则返回1,否则返回-1。
答案 2 :(得分:0)
对象没有getNumber方法。正如您已经使用泛型,您比较方法签名应该是:
public int compare(Event obj1, Event obj1) {
^^
使用Comparator,您需要覆盖compare方法而不是compareTo。
现在你可以在事件对象上使用getNumber。你也不应该使用number1 - number2,因为它可能导致数字溢出,因此我建议你使用类似的东西:
num1<num2 ? -1 : (num1==num2 ? 0 : 1)
答案 3 :(得分:0)
编辑完成后,Comparator
现在采用Object
类型。以下说明的相同规则适用于您的Comparator<Object>
。但是,如果没有显式转换,您将无法调用getNumber
方法,因为对象没有任何此类方法。
如果您使用Comparator
Comparator<Event>
接口。这意味着您要比较两个Event
个对象。Comparator
没有compareTo
方法。它有一个compare
方法,它将采用您正在实现的Comparator
类型的两个参数。自您实施Comparator<Event>
后,您的compare
方法应该有2个Event
个参数。java-doc
中阅读Comparator
方法的int
。它解释了getNumber
返回值代表什么。如果myComparator
返回一个数字,请避免减法,否则您可能会成为溢出的受害者。private
声明为myComparator
类。仅当SELECT server, title FROM tickets ORDER BY time DESC, title ASC, server ASC LIMIT 5
是内部类时才允许这样做。 我故意不提供更正后的代码,因为我想避免用勺子喂你答案。