我使用以下行以相反的顺序对浮点数组进行排序,但是我收到了错误消息,出了什么问题?
float sortedData[]=new float[100];
...
Arrays.sort(sortedData,Collections.reverseOrder());
错误:找不到符号
symbol:方法排序(float [],java.util.Comparator) location:类java.util.Arrays Arrays.sort(sortedData,Collections.reverseOrder());
=============================================== ==========================
我很困惑,因为在Jdk1.6 api中,我看到了这个:[Arrays] public static void sort( float [] a),它没有说:public static void sort(< strong>浮动 [] a)
答案 0 :(得分:3)
特定的method采用Object类型的数组。 float类型不会扩展Object类,但Float会扩展。
Float sortedData[]=new Float[100];
...
Arrays.sort(sortedData,Collections.reverseOrder());
答案 1 :(得分:3)
我建议使用Arrays.sort(float[])
,然后编写方法reverse(float[])
(您可能想也可能不想转移NaN)。
答案 2 :(得分:2)
没有Arrays.sort(float[], Comparator)
方法;但是你可以使用或Arrays.asList()
或只使用盒装的Float []数组:
Float[] sortedData = new Float[100];
...
Arrays.sort(sortedData, Collections.reverseOrder());
为了封装基本数组,您可以使用以下代码:
public static Float[] floatArray(float... components) {
return toBoxedArray(Float.class, components);
}
private static <T> T[] toBoxedArray(Class<T> boxClass, Object components) {
final int length = Array.getLength(components);
Object res = Array.newInstance(boxClass, length);
for (int i = 0; i < length; i++) {
Array.set(res, i, Array.get(components, i));
}
return (T[]) res;
}
之类的内容
答案 3 :(得分:1)
编译器不是骗你的。 Arrays中没有一个名为“sort”的方法,它接受一个float数组和一个Comparator。但是,有一种称为“排序”的方法,它采用对象和比较器的数组。也许如果在调用sort之前将数组转换为Float数组?
将其视为Java自动装箱中的缺陷,如果你愿意的话,它不能将基元数组自动放入等效对象的数组中。
答案 4 :(得分:1)
Guava有一个方法Floats.asList()
,用于创建由List<Float>
数组支持的float[]
。您可以将它与Collections.sort一起使用,以将Comparator应用于基础数组。
List<Float> floatList = Floats.asList(arr);
Collections.sort(floatList, Collections.reverseOrder());
请注意,列表是由实际数组支持的实时视图,因此它应该非常有效。
答案 5 :(得分:0)
其他人解释了原因。你能先把它排序然后反转吗?
答案 6 :(得分:0)
同样,在for循环中使用自动装箱:
double[] dbArray = {2.0, 3.0, 4.0, 5.0};
Double[] dBArray = new Double[dbArray.length];
int i = 0;
for(Double db : dbArray){
dBArray[i] = db; i++;
}
Arrays.sort(dBArray, Collections.reverseOrder());
答案 7 :(得分:0)
使用Java 8,您可以使用下面的Steam API -
(没有FloatStream和直接mapToFloat方法,但你总是可以使用double)
float[] unsorted = new float[100];
....
List<Double> sorted = IntStream.range(0, unsorted.length).mapToDouble(i->unsorted[i]).boxed().sorted(Collections.reverseOrder()).collect(Collectors.toList());