【发布时间】:2019-05-12 06:48:25
【问题描述】:
我必须比较自定义类的对象,比如 A。
比较是基于 A 的 int 成员(比如 mem)的简单比较。
所以在比较器实现中,我可以这样做:
(A a1, A a2) -> {return (Integer)a1.getMem().compareTo(a2.getMem());}
或者,我可以自己做比较:
(A a1, A a2) -> {
if(a1.getMem() > a2.getMem()){
return 1;
}else{
if(a1.getMem() < a2.getMem()) {
return -1;
}else{
return 0
}
}
}
哪种方法更好?
第一种方法的代码行数要少得多,但在内部 compareTo 与我们在第二种方法中所做的相同。
【问题讨论】:
-
我都不会使用,但
Integer.compare(a1.getMem(), a2.getMem())也可以避免演员阵容。但通常使用第二种方法,并且(几乎)总是尝试使用现有的 API 来做你的事情,而不是重新发明轮子。这样可以避免出现错误,因为您无法将问题添加到比较算法中,就像方法 2 中可能发生的那样。
标签: java comparator