Java:实现可比较但条件 if 太多。我怎样才能避免它们?

标签 java design-patterns if-statement comparator comparable

我有一个实现Comparable的对象列表

我想对此列表进行排序,这就是我使用Comparable的原因。

每个对象都有一个字段 weight,它由另外 3 个成员 int 变量组成。

对于具有最大权重的对象,compareTo 返回1
最重的不仅是如果

weightObj1.member1 > weightObj2.member1  
weightObj1.member2 > weightObj2.member2  
weightObj1.member3 > weightObj2.member3

但实际上有点复杂,我最终得到的代码有太多条件 if。

如果 weightObj1.member1 > WeightObj2.member1 成立,那么我关心 weightObj1.member2 > WeightObj2.member2 是否成立。

反之亦然。

否则,如果 weightObj1.member2 > WeightObj2.member2 成立,那么我关心 weightObj1.member3 > WeightObj2.member3 ,反之亦然。

最后,如果 weightObj1.member3 > WeightObj2.member3 成立并且如果满足特定条件,则此 weightObj1 获胜,反之亦然

我想知道是否有类似的设计方法?

最佳答案

您可以尝试使用 Apache commons-lang 中的 CompareToBuilder :

public int compareTo(Object o) {
   MyClass myClass = (MyClass) o;
   return new CompareToBuilder()
     .appendSuper(super.compareTo(o)
     .append(this.field1, myClass.field1)
     .append(this.field2, myClass.field2)
     .append(this.field3, myClass.field3)
     .toComparison();
}

另请参阅

关于Java:实现可比较但条件 if 太多。我怎样才能避免它们?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8957139/

相关文章:

java - 非法参数异常 : ProtectionToken is not a <wsp:Policy> element

design-patterns - 命名此模式

c、段错误

java - 过滤元素的设计模式

excel - 如何在 Excel 中的 IF/AND 函数中使用 MONTH() 函数

MySQL IF 然后用数学

java - 尝试学习Spring Development但遇到很多问题

java - 文件名、目录名或卷标语法不正确

java - 在调用 onMessage() 后的 JMS 异步消息处理中,消息从队列中删除

design-patterns - 添加多个费用和项目明智列表的建议设计模式