我使用以下行以相反的顺序对浮点数组进行排序,但是我收到了一条错误消息,出了什么问题?
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)
8 回答
没有
Arrays.sort(float[], Comparator)
方法;但是你可以使用或Arrays.asList()
或只使用盒装的Float []数组:为了封装基本数组,您可以使用以下代码:
或包含类似commons lang in your project and use ArrayUtils的内容
编译器不是骗你的 . Arrays中没有一个名为“sort”的方法,它接受一个float数组和一个Comparator . 但是,有一种称为“排序”的方法,它采用对象和比较器的数组 . 也许如果在调用sort之前将数组转换为Float数组?
可以把它想象成Java自动装箱中的缺陷,如果你愿意的话,它不能将基元数组自动放入等效对象的数组中 .
具体的method,采用Object类型的数组 . float类型不会扩展Object类,但Float会扩展 .
我建议使用
Arrays.sort(float[])
,然后编写一个方法reverse(float[])
(你可能想也可能不想转移NaNs) .Guava有一个方法Floats.asList(),用于创建由
float[]
数组支持的List<Float>
. 您可以将它与Collections.sort一起使用,以将Comparator应用于基础数组 .请注意,该列表是由实际数组支持的实时视图,因此它应该非常高效 .
其他人解释了原因 . 你可以先排序然后反转吗?
同样,在for循环中使用自动装箱:
使用Java 8,您可以使用如下的Steam API -
(没有FloatStream和直接mapToFloat方法,但你总是可以使用double)
使用盒装方法将原语转换为对象类型的代码 .
Collections.reverseOrder()以相反的顺序帮助排序 .
最后收集它到列表,在这里你也可以使用其他类型 .