编辑:添加了一些信息。
我有一个对象数组。每个对象都有一个名称和一个值。我需要按照这些值的降序对对象进行排序,并打印名称。我看到了这个简单的解决方案,但似乎无法将其应用于我的问题:http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/
代码编译时没有错误,但数组未按排序。我知道这是因为我知道输出应该是什么,即输出应该是var364,var200,var65等等。我得到的是var1,var2,var3等。
我试图在这里删除不相关部分的代码:
主要课程
print(data.preselection());
private void print (UnitRow preselectedUnitRow) {
out.printf("Variables after preselection: \n");
for (int i=0;i<PRESELECTION_LIMIT;i++) {
out.printf("%s, ",preselectedUnitRow.getUnitName(i));
}
}
数据集(数据)
private UnitRow data;
...
public UnitRow preselection() {
UnitRow standardDeviationUnits = new UnitRow(numberOfVariables);
for (int i=0;i<numberOfVariables;i++){
Unit unit = new Unit(1,variableNames[i],calculateStandardDeviation(i));
standardDeviationUnits.add(unit);
}
standardDeviationUnits.sort();
return standardDeviationUnits;
}
UnitRow
import java.util.Arrays;
public class UnitRow {
private Unit[] units;
private int count;
...
public void sort() {
Arrays.sort(units);
}
}
单元
public class Unit implements Comparable<Unit>{
private NumberRow elements; //just a class with an array of doubles
private String name;
...
@Override
public int compareTo(Unit compareUnit) { //getValue returns a single type double number
int comparison = (int) (compareUnit.getValue(0) - getValue(0));
return comparison;
}
}
我假设我的Comparable实现是错误的。你能发现问题吗? 我这样说是因为我测试如下:
System.out.println(standardDeviationUnits.getValue(0,0));
standardDeviationUnits.sort();
System.out.println(standardDeviationUnits.getValue(0,0));
返回完全相同的值。
答案 0 :(得分:0)
看起来像逆序
public int compareTo(Unit compareUnit) {
if (getValue(0) < compareUnit.getValue(0)) return 1;
else if (getValue(0) > compareUnit.getValue(0)) return -1;
return 0;
}
试试这个。
另请注意,在compareTo
中,您不必要地写了返回2;并写了3 if
而不是1 if-else
。
答案 1 :(得分:0)
如果您尝试按名称排序:
return compareUnit.name.compareTo(name);
否则我不知道你的getValue(0)返回给你的属性,但是如果你试图按照getValue(0)排序:
return compareUnit.getValue(0)-getValue(0);