我有一个由以下组成的类(实现 Comparable):
double[1][2];
我会排序我的arrayList,我尝试过这种方式,但我报告了一个错误:
public double compareTo(Matrix another) {
return this.getCell(0,1).compareTo(another.getCel(0,1));
}
怎么能这样排序呢?
我有一个由以下组成的类(实现 Comparable):
double[1][2];
我会排序我的arrayList,我尝试过这种方式,但我报告了一个错误:
public double compareTo(Matrix another) {
return this.getCell(0,1).compareTo(another.getCel(0,1));
}
怎么能这样排序呢?
据推测,调用getCell()
返回 a double
,它没有方法(如 ( compareTo()
)。
此外,接口的compareTo()
方法Compareae
必须返回int
,而不是double
。
尝试这个:
public int compareTo(Matrix another) {
double diff = getCell(0,1) - another.getCel(0,1);
return diff == 0 ? 0 : diff > 0 ? 1 : -1;
}
此解决方案适用于所有 java 版本。对于 java 7+,您可以这样做:
public int compareTo(Matrix another) {
return Double.compare(getCell(0, 1), another.getCell(0, 1));
}
this.
还要注意从代码中删除冗余的轻微清理。
您的问题不是很清楚,发布SSCCE会有所帮助。但是由于getCell
返回double
,你的方法应该是这样的:
public int compareTo(Matrix another) {
return Double.valueOf(this.getCell(0, 1))
.compareTo(Double.valueOf(another.getCell(0, 1)));
}
它的工作方式是将每个比较double
的原语包装在一个Double
对象中。由于Double
实现Comparable<Double>
,您的方法可以委托给Double.compareTo
.
或者,您可以使用静态实用程序方法Double.compare(double, double)
:
public int compareTo(Matrix another) {
return Double.compare(this.getCell(0, 1), another.getCell(0, 1));
}
这是更可取的,因为它更简洁,但我想提到第一个解决方案,因为它涉及将原语装箱到它们的对象对应物,这通常是为了利用类方法和在集合中使用原语通常是必要的。