Rules to implement compare method
Asked Answered
D

1

5

like compareTo, that have to be "reflexive, antisymmetric and transitive", are there any rules to implement the compare method?? thanks

Decorum answered 6/2, 2013 at 15:24 Comment(4)
Are you serious? The only rule for compare() method is to return true when both objects are equal, and return false when they aren't. Without the concrete comparison method and concrete objects that need to be compared, you are the best judge what that method needs to have to evaluate if these two objects should be considered "equal" or not.Immunogenetics
@gepeppe I think you need to elaborateSheepshead
I think the OP just wanted to know if there is a common contract for compare() as there is for compareTo. Legit question for a newbie, I think.Solorio
@Fildor: fair enough. The only rule that one should be concerned with then is to be sure it's consistent with equals() or note that they aren't.Immunogenetics
E
13

From Comparator API:

  1. The implementor must ensure that sgn(compare(x, y)) == -sgn(compare(y, x)) for all x and y. (This implies that compare(x, y) must throw an exception if and only if compare(y, x) throws an exception.)
  2. The implementor must also ensure that the relation is transitive: ((compare(x, y)>0) && (compare(y, z)>0)) implies compare(x, z)>0.
  3. Finally, the implementor must ensure that compare(x, y)==0 implies that sgn(compare(x, z))==sgn(compare(y, z)) for all z.
  4. It is generally the case, but not strictly required that (compare(x, y)==0) == (x.equals(y)). Generally speaking, any comparator that violates this condition should clearly indicate this fact. The recommended language is "Note: this comparator imposes orderings that are inconsistent with equals."
Enliven answered 6/2, 2013 at 15:26 Comment(3)
Pretty much copy/pasted his "reflexive, antisymmetric and transitive" comment.Immunogenetics
@Immunogenetics that is what is in the doc. yepp, its a copy/paste from the API . :)Enliven
Still an upvote because it's pretty clear about what should be done... :)Immunogenetics

© 2022 - 2024 — McMap. All rights reserved.