Another 解决方案是,如果您正在使用Comparable接口,则可以切换您在compareTo中指定的输出值(Object bCompared) .
例如 :
public int compareTo(freq arg0)
{
int ret=0;
if(this.magnitude>arg0.magnitude)
ret= 1;
else if (this.magnitude==arg0.magnitude)
ret= 0;
else if (this.magnitude<arg0.magnitude)
ret= -1;
return ret;
}
public int compareTo(freq arg0)
{
int ret=0;
if(this.magnitude>arg0.magnitude)
ret= -1;
else if (this.magnitude==arg0.magnitude)
ret= 0;
else if (this.magnitude<arg0.magnitude)
ret= 1;
return ret;
}
package doublearraysort;
import java.util.Arrays;
import java.util.Collections;
public class Gpa {
public static void main(String[] args) {
// initializing unsorted double array
Double[] dArr = new Double[] {
new Double(3.2),
new Double(1.2),
new Double(4.7),
new Double(3.3),
new Double(4.6),
};
// print all the elements available in list
for (double number : dArr) {
System.out.println("GPA = " + number);
}
// sorting the array
Arrays.sort(dArr, Collections.reverseOrder());
// print all the elements available in list again
System.out.println("The sorted GPA Scores are:");
for (double number : dArr) {
System.out.println("GPA = " + number);
}
}
}
14 回答
您可以使用它来排序所有类型的对象
Arrays.sort()
不能直接用于按降序对原始数组进行排序 . 如果您尝试通过传递Collection.reverseOrder()
定义的反向比较器来调用Arrays.sort()
方法,则会抛出错误这将适用于Integer数组,但不适用于int数组 .
按降序对基本数组进行排序的唯一方法是,首先按升序对数组进行排序,然后将数组反转到位 . 对于二维原始数组也是如此 .
你可以用这个:
Collections.reverseOrder()
使用逆自然顺序返回Comparator
. 您可以使用Collections.reverseOrder(myComparator)
获得自己的比较器的反转版本 .列表
对于一个数组
没有明确的比较:
用明确的比较器:
另一种选择可能是(数字!!!)
将数组乘以-1
排序
再次乘以-1
直译:
Java 8:
更新:
reversed()
反转指定的比较器 . 通常,比较器按升序排序,因此这会将顺序更改为降序 .对于包含基元元素的数组,如果有
org.apache.commons.lang(3)
处理方便反向数组(在排序后)使用:我不知道你的用例是什么,但是除了其他答案之外,另一个(懒惰)选项仍然是按照你指示的升序排序,而是以相反的顺序迭代 .
首先,您需要使用以下方法对数组进
然后,您需要使用以下命令将顺序从升序转换为降序:
Another 解决方案是,如果您正在使用Comparable接口,则可以切换您在compareTo中指定的输出值(Object bCompared) .
例如 :
magnitude 是我程序中数据类型为double的属性 . 这是按照它的大小以相反的顺序对我定义的类freq进行排序 . 因此,为了纠正这个问题,您可以切换
<
和>
返回的值 . 这为您提供以下内容:要使用此compareTo,我们只需调用
Arrays.sort(mFreq)
,它将为您提供已排序的数组freq [] mFreq
.这个解决方案的优点(在我看来)可以用来对用户定义的类进行排序,甚至可以用特定的属性对它们进行排序 . 如果Comparable接口的实现对你来说听起来令人生畏,那么我就是这样了 . 这对我来说更容易 . 希望人们可以利用这个解决方案,你的喜悦甚至可以与我的相媲美 .
要么
我知道这是一个非常古老的线程,但这里是Integers和Java 8的更新版本:
请注意,正常升序(或Comparator.comparingInt())为“o1 - o2” .
这也适用于任何其他类型的对象 . 说:
这对我有用:
输出:
只需使用此方法按降序对double类型的数组进行排序,只需更改“返回类型”,“参数类型”,即可使用它对任何其他类型的数组(如int,float等)进行排序 . 变量“x”类型为相应的类型 . 您还可以在if条件中将“> =”更改为“<=”以使订单升序 .