编辑:添加了一些信息。我有一个对象数组。每个对象都有一个名称和一个值。我需要按照这些值的降序对对象进行排序,并打印出名称。我看到这个简单的解决方案,但似乎无法将其应用到我的问题:http://www.mkyong.com/java/java-object-sorting-example-comparable-and-comparator/基于属性对对象数组排序
该代码编译没有错误,但数组未被排序在所有。我知道这是因为我知道输出应该是什么,即输出应该是类似var364,var200,var65等,我得到的是var1,var2,var3等。
我试图去掉不相关的代码份这里:
Main类
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;
}
}
我假设我实现可比是错误的。你能发现问题吗? 我这样说是因为我测试如下:
System.out.println(standardDeviationUnits.getValue(0,0));
standardDeviationUnits.sort();
System.out.println(standardDeviationUnits.getValue(0,0));
,返回的值完全相同。
为什么你认为你的'compareTo'是错的?你是否遇到编译时错误,或者数组排序不正确? – dasblinkenlight
是忘了提。代码编译时没有错误,但数组并未排序(完全没有)。它似乎好像这种甚至没有被称为。我知道它没有排序,因为我知道输出应该是什么样子。 – Dimebag
为什么不在单元compareTo中,只是返回getValue(0) - CompareUnit.getValue(0)? –