首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否使用compareTo

是否使用compareTo
EN

Stack Overflow用户
提问于 2019-05-12 06:48:25
回答 3查看 80关注 0票数 2

我必须比较自定义类的对象,比如A。

比较是基于A的int成员(如mem )的比较。

因此,在比较器的实现中,我可以这样做:

代码语言:javascript
复制
(A a1, A a2) -> {return (Integer)a1.getMem().compareTo(a2.getMem());}

或者,我可以自己做比较:

代码语言:javascript
复制
(A a1, A a2) -> {
     if(a1.getMem() > a2.getMem()){
         return 1;
     }else{
        if(a1.getMem() < a2.getMem()) {
            return -1;
         }else{
             return 0
          }
     }
}

哪一种方法更好?

第一种方法的代码行要少得多,但在内部,compareTo所做的与我们在第二种方法中所做的相同。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-12 06:58:16

通常最好不要重新发明轮子。因此,第一种方法更好。

您甚至可以使用Comparator.comparingInt编写更少的代码。

代码语言:javascript
复制
Comparator.comparingInt(A::getMem)
票数 8
EN

Stack Overflow用户

发布于 2019-05-12 07:00:00

走第一条路。它比一堆if语句和返回神奇的数字更易读(我们如何比较两个Acompare它们的getMem)。此外,使用像compareTo这样的库中的方法比自己编写一堆比较逻辑更容易出错。想象一下,将-1错误地输入为1,或者将<错误地键入为>

但是,还有一个更好的方法:

代码语言:javascript
复制
Comparator.comparingInt(A::getMem)
票数 4
EN

Stack Overflow用户

发布于 2019-05-12 07:41:44

要达到“好”的代码基础,最基本的规则之一是:像瘟疫一样避免代码复制

这不仅仅是为了编写最小数量的代码来解决问题。它实际上是关于:在多个地方没有相同的逻辑。

为什么?因为当您决定在某一时刻更改该逻辑时,您必须记住更新包含该逻辑的所有位置。

有研究表明,在较大的项目中的代码重复迟早会导致有多个几乎相同的克隆的某些逻辑。你猜怎么着:这就是臭虫的藏身之处。你复制了10行中的9行,并在这9行中做了一个细微的修改。或者您只是添加了一个bug,或者您修复了这9行中的一个问题,而不是原来的10行。现在,代码中的两个位置所做的事情略有不同。很少有好事。

所以,遵循另外两个答案,但要明白为什么你要这么做。

毫无疑问:在某一时刻,您可能会决定这个compareTo实现不再是您所需要的。然后把它改成别的东西,然后把它完整地写在这个地方是很好的。但是直到那一天:重用那些已经存在的代码!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56096845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档