13

我可以使用 compareTo 对整数和双精度值进行排序吗?我的系统给了我一个错误,我无法在原始类型 int 上调用 compareTo(int)。有任何想法吗?

代码:

public int compare(Object o1, Object o2) {  
Record o1C = (Record)o1;
Record o2C = (Record)o2;                
return o1C.getPrice().compareTo(o2C.getPrice());
}

class Record
    public class Record {
    String name;
    int price;    

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

    public int getPrice() {
        return price;
    }
    public void setPrice(int price) {
        this.price = price;
    }
}
4

4 回答 4

25

好吧,编译器是对的:) 你不能compareTo直接调用。但是,根据您使用的 Java 版本,您可以使用Integer.compare(在 1.7 中引入)和Double.compare(在 1.4 中引入)。

例如:

return Integer.compare(o1C.getPrice(), o2C.getPrice());

如果您不在 1.7 上并且仍想使用内置方法,则可以使用:

Integer price1 = o1C.getPrice();
Integer price2 = o2C.getPrice();
return price1.compareTo(price2);

...但这将使用不必要的拳击。鉴于对大型集合进行排序可以执行很多比较,这并不理想。compare在您准备好使用 1.7 之前,可能值得自己重写。这很简单:

public static int compare(int x, int y) {
    return x < y ? -1
         : x > y ? 1
         : 0;
}
于 2013-01-06T02:03:01.700 回答
14

更改代码

int price;  

Integer price;

因为原始类型如int不支持任何方法,如compareTo().

于 2013-01-06T06:03:04.537 回答
2

在您当前的代码中;更简单的解决方案是改变这条线,一切都会好的:

return o1C.getPrice() - o2C.getPrice() ;

这也可以很好地工作并且性能也很好,因为方法 compare() 只有以下要求,即。如果两个值相等则返回零;否则为正/负数。

于 2013-01-06T03:06:44.023 回答
1

第 1 步:按姓氏对列表进行排序(对于字符串值)

Collections.sort(peopleList, (p1, p2) -> 
                     p1.getLastName().compareTo(p2.getLastName()));

第 2 步:打印列表中的所有元素

for (People ppl : peopleList) {
    System.out.print(ppl.getFirstName()+" - "+ppl.getLastName());
}

第 1 步:按年龄排序列表(对于 int 值)

Collections.sort(peopleList, (p1, p2) -> p1.getAge() - (p2.getAge()));

第 2 步:打印列表中的所有元素

for (People ppl : peopleList) {
    System.out.println(ppl.getAge());
}
于 2018-12-13T10:06:11.563 回答