Java中比较对象的更优雅的方式

Java中比较对象的更优雅的方式,java,guava,apache-commons,Java,Guava,Apache Commons,Java有一个接口比较器,它有一个方法int compare(to1,t2) 编辑: 我错了: 如果第一个对象小于,则返回的整数必须是-1 第二个,1如果第二个小于第一个,0如果它们是 平等 文件说明: 负整数、零或正整数作为第一个参数 小于、等于或大于第二个 因此,我重新表述我的问题: 有没有比记住比较器更优雅的比较对象的方法。compare(o1,o2)

Java有一个接口
比较器
,它有一个方法
int compare(to1,t2)

编辑:

我错了:

如果第一个对象小于,则返回的整数必须是
-1
第二个,
1
如果第二个小于第一个,
0
如果它们是 平等

文件说明:

负整数、零或正整数作为第一个参数 小于、等于或大于第二个

因此,我重新表述我的问题: 有没有比记住比较器更优雅的比较对象的方法。compare(o1,o2)<0实际上意味着第一个对象小于第二个对象?

比较你的陈述

如果第一个对象小于第二个对象,则返回的整数必须为-1;如果第二个对象小于第一个对象,则返回的整数必须为1;如果它们相等,则返回的整数必须为0

官方声明

返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数

请注意,唯一合适的常数是零。

比较您的陈述

如果第一个对象小于第二个对象,则返回的整数必须为-1;如果第二个对象小于第一个对象,则返回的整数必须为1;如果它们相等,则返回的整数必须为0

官方声明

返回负整数、零或正整数,因为第一个参数小于、等于或大于第二个参数


请注意,唯一合适的常数是零。

比较法的官方接口合同是:

返回负整数、零或正整数作为第一个 参数小于、等于或大于第二个参数

事实上,您只需要三个值,这个逻辑可以用来编写优雅的代码,如下所示:

public int compare(MyObject o1, MyObject o2){
    return o1.getIntValue() - o2.getIntValue();
}
在一行中,它不仅给出了哪个物体更大(或相等),甚至给出了一个物体比另一个物体大多少


(不考虑整数溢出。)

比较方法的官方接口合同为:

返回负整数、零或正整数作为第一个 参数小于、等于或大于第二个参数

事实上,您只需要三个值,这个逻辑可以用来编写优雅的代码,如下所示:

public int compare(MyObject o1, MyObject o2){
    return o1.getIntValue() - o2.getIntValue();
}
在一行中,它不仅给出了哪个物体更大(或相等),甚至给出了一个物体比另一个物体大多少


(不考虑整数溢出。)

三个常数的问题。你不能在任何Util文件中声明它们吗?为什么你不自己声明它们呢?你可以使用Guava的。如果是不相等的整数,返回值既不是1也不是-1。返回值为正数或负数。没有“正数”或“负”的常数……问题是合理的。“幻数”-1,0,1应该在Java标准库中的某个地方定义,但它们似乎不是。关于3个常量。你不能在任何Util文件中声明它们吗?为什么你不自己声明它们呢?你可以使用Guava的。如果是不相等的整数,返回值既不是1也不是-1。返回值为正数或负数。“正数”和“负数”中没有常数……这个问题是有道理的。“幻数”-1,0,1应该在Java标准库中的某个地方定义,但它们似乎不是。Java提供了
Integer。比较
,因此用户不再需要进行此操作。还要注意,OP是比较对象,而不是整数。它不优雅,因为它有缺陷。你写的是马车,但这并没有让它变得更好。你永远不可能知道这样一个方法调用的是什么值,所以你最好避免溢出,特别是在这么简单的情况下。Java提供了
Integer。比较
,这样用户就再也不需要这样做了。还要注意,OP是比较对象,而不是整数。它不优雅,因为它有缺陷。你写的是马车,但这并没有让它变得更好。你永远不可能知道这样一个方法调用的是什么值,所以你最好避免溢出,特别是当它这么简单的时候。