При выполнении Collection.sort using
обычай компаратор я получаю java.lang.IllegalArgumentException: Comparison method violates its general contract
метод сравнения Java нарушает его генподряд
Я понимаю, что это проблема в связи с тем, что этот метод не является транзитивным. В моем компараторе вызывается несколько методов, и я идентифицировал фрагмент кода, который нарушает это правило. Однако я не могу это исправить и не вижу проблемы с ним.
private int compareInstancesBelowChangeNumberStructureElements(ISapInstance pInstance1,
ISapInstance pInstance2) {
// Sort algorithm below change number structure elements
String[] tokens1 = pInstance1.getName().asString().split(COMPOUND_NAME_DELIMITER_REGEX);
String[] tokens2 = pInstance2.getName().asString().split(COMPOUND_NAME_DELIMITER_REGEX);
if ((tokens1 == null) || (tokens2 == null)) {
return 0;
}
int minLength = tokens1.length;
if (tokens2.length < minLength) {
minLength = tokens2.length;
}
if (minLength < 3) {
return 0;
}
// Compare criterion 1: node name or assembly group name
int compareValue = tokens1[2].compareTo(tokens2[2]);
if ((compareValue == 0) && (minLength >= 4)) {
// Compare criterion 2: class name
compareValue = tokens1[3].compareTo(tokens2[3]);
if (compareValue == 0) {
// Compare criterion 3: pos var name or assembly position name
compareValue = tokens1[1].compareTo(tokens2[1]);
if (compareValue == 0) {
// Compare criterion 4: instance name
compareValue = tokens1[0].compareTo(tokens2[0]);
}
}
}
return compareValue;
}
Я не знаю, почему вы удалили весь код из своего вопроса, но, пожалуйста, верните его. Ответы бесполезны и бессмысленны без него. – VGR