Java 无法对原语类型double调用compareTo(double)
行Java 无法对原语类型double调用compareTo(double),java,compare,comparable,compareto,Java,Compare,Comparable,Compareto,行返回数组[index1]。比较(数组[index2])提供错误“无法调用原语类型double上的compareTo(double)”。如何解决这个问题 /*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/ /*:: This function implements a comparator of double values :*/ /*:::::::::::::::::::::::::::
返回数组[index1]。比较(数组[index2])代码>提供错误“无法调用原语类型double上的compareTo(double)”。如何解决这个问题
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
/*:: This function implements a comparator of double values :*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
private class ArrayIndexComparator implements Comparator<Integer>
{
private final double[] array;
public ArrayIndexComparator(double[] array)
{
this.array = array;
}
public Integer[] createIndexArray()
{
Integer[] indexes = new Integer[array.length];
for (int i = 0; i < array.length; i++)
{
indexes[i] = i; // Autoboxing
}
return indexes;
}
@Override
public int compare(Integer index1, Integer index2)
{
// Autounbox from Integer to int to use as array indexes
return array[index1].compareTo(array[index2]);
}
}
double[] dist = new double[centroids.size()];
// fill array...
ArrayIndexComparator comparator = new ArrayIndexComparator(dist);
Integer[] indexes = comparator.createIndexArray();
Arrays.sort(indexes, comparator);
/*:*/
/*::此函数实现双值比较器:*/
/*:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::*/
私有类ArrayIndexComparator实现Comparator
{
私有最终双[]数组;
公共阵列索引比较器(双[]阵列)
{
this.array=数组;
}
公共整数[]createIndexArray()
{
整数[]索引=新整数[array.length];
for(int i=0;i
在java中,基本类型没有任何方法。相反,使用原始数据类型使用包装器类
改变
return array[index1].compareTo(array[index2]);
到
或
尝试使用Double[]数组
而不是双[]数组
将实例方法的调用compareTo
替换为的调用,如下所示:
return Double.compare(array[index1], array[index2]);
这使您可以将双精度保存在一个基元数组中,并避免在调用实例方法之前自动装箱。对于基元类型,不要使用比较,而是使用=
但是如果您想使用compareTo
只需创建一个双数组
Double[] dist = new Double[centroids.size()];
comparator无法直接比较基元类型,因为接口仅由collator和RuleBasedCollector实现。没有包装器类实现comparator。由于该编译器将无法自动装箱
只要查看Double类,您就会发现一个内置的方法,它提供了比较方法
公共静态整数比较(双d1,双d2)
返回:
如果d1在数值上等于d2,则值为0;如果d1在数值上小于d2,则值小于0;如果d1在数值上大于d2,则该值大于0
反向:将整个表达式乘以-1 =
不是compareTo
的等价物,而是equals
的等价物。要了解更多信息,请访问java文档,并在其中访问包java.lang.Double,这称为包装器类,在Java中,对于每种基本类型,都有相应的包装器类存在于Java.lang包下。这里是文档链接,在这种情况下如何按相反顺序排序?放在哪里,Collections.reverseOrder()?@klausklausosCollections.reverseOrder()
用于反转自然顺序。由于您使用的是比较器,因此可以通过调用Double.compare(array[index2],array[index1])
或向构造函数添加一个额外的boolean isReverseOrder
标志,将其存储在成员变量中,来切换比较器内部的顺序,当设置了isReverseOrder
时,在compare
方法中反转比较结果。
Double[] dist = new Double[centroids.size()];