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获胜,反之亦然
我想知道有这样的设计方法吗?
您可以尝试使用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)