In this code  result = myDef.getRank() - inDef.getRank();
I am getting java.lang.IllegalArgumentException: Comparison method violates its general contract!  
Below is the code snippet . Please help me to resolve this issue.
public int compareTo(Object inObj) {
    int result = 0;
    if (inObj instanceof OmsFeatureFacade) {
        OmsFeatureFacade inFeature = (OmsFeatureFacade) inObj;
        FeatureDefinition inDef = inFeature.getFeatureDefinition();
        FeatureDefinition myDef = getFeatureDefinition();
        if ((inDef == null) || (myDef == null) ) {
            return result;
        }
        // Handling of primary feature.
        if (myDef.isPrimary() != inDef.isPrimary()) {
            if (myDef.isPrimary()) {
                return -1;
            }
            if (inDef.isPrimary()) {
                return 1;
            }
        }
        // Place all bolt on features under primary
        if (myDef.isPrimaryPricePlan() != inDef.isPrimaryPricePlan()) {
            if (myDef.isPrimaryPricePlan()) {
                return -1;
            }
            if (inDef.isPrimaryPricePlan()) {
                return 1;
            }
        }
        // Handling of SC feature.
        if (this.isSysGeneratedFeature() != inFeature.isSysGeneratedFeature()) {
            if (this.isSysGeneratedFeature()) {
                return -1;
            }
            if (inFeature.isSysGeneratedFeature()) {
                return 1;
            }
        }
        // First Sort by rank asc, if no rank, then getRank() returns very large number.
        result = myDef.getRank() - inDef.getRank();
        if (result != 0) {
            return result;
        }
        // Group by price plan, and sort alpha asc.
        result = myDef.getPricePlanCode().compareTo(inDef.getPricePlanCode());
        if (result != 0) {
            return result;
        }
        // Handling of main feature for price plan.
        if (this.isMainFeature() != inFeature.isMainFeature()) {
            if (this.isMainFeature()) {
                return -1;
            }
            if (inFeature.isMainFeature()) {
                return 1;
            }
        }
        // Sort alpha asc.
        result = myDef.getDescription().compareTo(inDef.getDescription());
        if (result != 0) {
            return result;
        }
    }
    return result;
}
 
     
     
    