[英]Java : How to sort an array of floats in reverse order?
我使用以下行以相反的順序對浮點數組進行排序,但是我收到了一條錯誤消息,出了什么問題?
float sortedData[]=new float[100];
...
Arrays.sort(sortedData,Collections.reverseOrder());
錯誤:找不到符號
symbol:方法sort(float [],java.util.Comparator)location:class java.util.Arrays Arrays.sort(sortedData,Collections.reverseOrder());
================================================== =======================
我很困惑,因為在Jdk1.6 api中,我看到了這個:[Arrays] public static void sort( float [] a),它沒有說:public static void sort( Float [] a)
我建議使用Arrays.sort(float[])
然后編寫一個reverse(float[])
方法reverse(float[])
(你可能想也可能不想轉移NaNs)。
沒有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;
}
或者在項目中包含像commons lang這樣的東西並使用ArrayUtils
編譯器不是騙你的。 Arrays中沒有一個名為“sort”的方法,它接受一個float數組和一個Comparator。 但是,有一種稱為“排序”的方法,它采用對象和比較器的數組。 也許如果在調用sort之前將數組轉換為Float數組?
可以把它想象成Java自動裝箱中的缺陷,如果你願意的話,它不能將基元數組自動放入等效對象的數組中。
Guava有一個Floats.asList()
方法,用於創建一個由float[]
數組支持的List<Float>
。 您可以將它與Collections.sort一起使用,以將Comparator應用於基礎數組。
List<Float> floatList = Floats.asList(arr);
Collections.sort(floatList, Collections.reverseOrder());
請注意,該列表是由實際數組支持的實時視圖,因此它應該非常高效。
其他人解釋了原因。 你可以先排序然后反轉嗎?
同樣,在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());
使用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());
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.