Java:实现可比较但有太多条件ifs.我该如何避免它们?

Cra*_*lus 0 java design-patterns if-statement comparable comparator

我有一个list实现的对象Comparable.

我想对这个列表进行排序,这就是我使用它的原因Comparable.

每个对象都有一个字段,weight由3个其他成员int变量组成.

具有最多的对象的compareTo返回. 最重的不仅仅是如果 1weight

weightObj1.member1 > weightObj2.member1  
weightObj1.member2 > weightObj2.member2  
weightObj1.member3 > weightObj2.member3
Run Code Online (Sandbox Code Playgroud)

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

如果weightObj1.member1 > weightObj2.member1持有,那么我在乎weightObj1.member2 > weightObj2.member2.

反之亦然.

否则,如果weightObj1.member2 > weightObj2.member2持有,那么我关心weightObj1.member3 > weightObj2.member3,反之亦然.

最后,如果weightObj1.member3 > weightObj2.member3持有AND,如果满足特定条件,则weightObj1获胜,反之亦然

我想知道有这样的设计方法吗?

Tom*_*icz 6

您可以尝试使用CompareToBuilderApache commons-lang:

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();
}
Run Code Online (Sandbox Code Playgroud)

也可以看看