I have a list
of objects which implement Comparable
.
I want to sort this list and that is why I used the Comparable
.
Each object has a field, weight
that is composed of 3 other member int variables.
The compareTo
returns 1
for the object with the most weight
.
The most weight is not only if the
weightObj1.member1 > weightObj2.member1
weightObj1.member2 > weightObj2.member2
weightObj1.member3 > weightObj2.member3
but actually is a little more complicated and I end up with code with too many conditional ifs.
If the weightObj1.member1 > weightObj2.member1
holds then I care if weightObj1.member2 > weightObj2.member2
.
and vice versa.
else if weightObj1.member2 > weightObj2.member2
holds then I care if weightObj1.member3 > weightObj2.member3
and vice versa.
Finally if weightObj1.member3 > weightObj2.member3
holds AND if a specific condition is met then this weightObj1
wins and vice versa
I was wondering is there a design approach for something like this?
The API for Comparable
states:
It is strongly recommended (though not required) that natural orderings be consistent with equals.
Since the values of interest are int
values you should be able to come up with a single value that captures all comparisons and other transformations you need to compare two of your objects. Just update the single value when any of the member values change.