当前位置: 首页 > 知识库问答 >
问题:

是否可以使用 compareTo 对整数值和双精度值进行排序?

巫晋鹏
2023-03-14

是否可以使用 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;
    }
}

共有3个答案

暴英达
2023-03-14

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

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

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

蒋啸
2023-03-14

更改代码

int price;  

Integer price;

因为基元类型(如 int)将不支持任何方法,如 compareTo()

胡厉刚
2023-03-14

好吧,编译器的正确:)您不能直接调用比较到。但是,根据您使用的 Java 版本,您可以使用整数比较(在 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;
}
 类似资料:
  • 问题内容: 我正在尝试通过其score属性的值(是double值)对自定义类染色体进行排序。这些染色体存储在ArrayList中。我知道我必须使用比较器,但是在过去的一个小时里我已经在线阅读了很多不同的观点,这使我感到非常困惑。 附上我的代码,如果有人可以指出正确的方向,我将不胜感激。 不知道这有什么区别,但是分数只能是0.0到1.0之间(包括0.0到1.0)的两倍 问题答案: 要使用: 如果您打

  • 我不明白为什么浮点值与双精度值不同。从下面的示例来看,对于相同的操作,float 提供的结果似乎与双精度型不同: 输出: 你能解释一下float和double之间的区别吗?

  • 我有一个实现可比较接口的类。在这个类中,我需要重写compareTo方法,以便按字符串值对对象进行排序。 如果你向下滚动到底部,我正在尝试我的方法 功能: 迄今为止的主要类别:

  • 本文向大家介绍对同时包含整数值和小数值的MongoDB字段进行排序,包括了对同时包含整数值和小数值的MongoDB字段进行排序的使用技巧和注意事项,需要的朋友参考一下 要进行排序,请在MongoDB中使用sort()。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是对包含整数和小数值的MongoDB字段进行排序的查询- 这将产生以下输出-

  • 问题内容: 是否有可能做到这一点? 我知道代码可能不会去这样的事情,但怎么也去了? 问题答案: 这将检查双精度值的四舍五入值是否与双精度值相同。 你的变量可能具有或值,并且始终具有int值,因此,如果你的变量等于,则它必须具有int值。 如果变量的值是无穷大或负无穷大,那么这也不起作用,因此向条件添加“只要变量不是无穷大”。

  • 我想按值长度对Map进行排序。例如,我有这样的代码: 结果是: 所以我想做的是按值长度对这个Map进行排序,所以它返回: