我可以使用compareTo来排序整数和双精度值吗?

时间:2013-01-06 02:01:07

标签: java

我可以使用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 个答案:

答案 0 :(得分: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);

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

public static int compare(int x, int y) {
    return x < y ? -1
         : x > y ? 1
         : 0;
}

答案 1 :(得分:12)

更改代码

int price;  

Integer price;

因为int等基本类型不支持任何方法,例如compareTo()

答案 2 :(得分:2)

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

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

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

答案 3 :(得分: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());
}