我试图使用下面的比较器而且我很少但始终如一地得到错误的比较方法违反了一般合同"。我已多次尝试调试它,但从未找到根本原因 - 这里有明显的问题吗?
Collections.sort(ArrayListOfMyObjects, new Comparator<MyObject>() {
public int compare(MyObject lhs, MyObject rhs) {
boolean lhsBool = lhs.getBooleanValueOfVariable;
boolean rhsBool = rhs.getBooleanValueOfVariable;
if (lhsBool && !rhsBool) {
return -1;
} else if (!lhsBool && rhsBool) {
return 1;
}
// objects have no booleans defined
else {
if (appGpsLocation == null) {
String lhsString = lhs.getStringValueOfVariable();
String rhsString = rhs.getStringValueOfVariable();
return lhsString.compareTo(rhsString);
} else {
float lhsFloat = lhs.getFloatValueOfVariable();
float rhsFloat = rhs.getFloatValueOfVariable();
int result = Float.compare(lhsFloat, rhsFloat);
return result;
}
}
}
});
编辑:
•(!useStrings)转换为 - &gt; (appHasGpsLocation == null)
•对象方法名称更改为与java方法更加不同
答案 0 :(得分:1)
假设appGpsLocation
期间sort
没有变化,那么该方法会维持合同。但是如果在appGpsLocation
期间sort
更改,则可能不会,因为它突然使用不同的信息来确定对象的关系,因此它&# 39;如果a.compare(b)
和b.compare(a)
之间发生appGpsLocation
更改,angular.module('ciscoImaDashboarAdmin')
.controller('minisCtrl', function ($scope) {
});
和ID3_sync_safe_to_int
可能会进行网格化。