有没有简单的方法可以像在Arrays类中升序排序一样降序排序数组?
还是说我必须停止懒惰并自己完成此操作 :[
对于二维数组按降序排序,您只需要翻转参数的位置即可。
int[][] array= {
{1, 5},
{13, 1},
{12, 100},
{12, 85}
};
Arrays.sort(array, (a, b) -> Integer.compare(a[1], b[1])); // for ascending order
Arrays.sort(array, (b, a) -> Integer.compare(a[1], b[1])); // for descending order
按降序输出结果
12, 100
12, 85
1, 5
13, 1
我不知道你的使用场景是什么,但除了其他答案之外,还有另一种(懒惰的)选择,就是按照你指示的升序排序,然后以相反的顺序迭代。
针对以上讨论,这里有一个简单的例子来将原始数组按降序排序。
import java.util.Arrays;
public class Main {
public static void main(String[] args) {
int[] nums = { 5, 4, 1, 2, 9, 7, 3, 8, 6, 0 };
Arrays.sort(nums);
// reverse the array, just like dumping the array!
// swap(1st, 1st-last) <= 1st: 0, 1st-last: nums.length - 1
// swap(2nd, 2nd-last) <= 2nd: i++, 2nd-last: j--
// swap(3rd, 3rd-last) <= 3rd: i++, 3rd-last: j--
//
for (int i = 0, j = nums.length - 1, tmp; i < j; i++, j--) {
tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
// dump the array (for Java 4/5/6/7/8/9)
for (int i = 0; i < nums.length; i++) {
System.out.println("nums[" + i + "] = " + nums[i]);
}
}
}
输出:
nums[0] = 9
nums[1] = 8
nums[2] = 7
nums[3] = 6
nums[4] = 5
nums[5] = 4
nums[6] = 3
nums[7] = 2
nums[8] = 1
nums[9] = 0
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;
}
在我的程序中,magnitude是一个带有double数据类型的属性。这导致我的定义类freq按照它们的magnitude值以相反的顺序进行排序。为了纠正这个问题,您需要交换<
和>
返回的值。这将给您以下结果:
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;
}
Arrays.sort(mFreq)
,它将为您提供排序后的数组freq[] mFreq
。以下是几种不同情况下的答案:
针对数组:
Arrays.sort(a, Comparator.reverseOrder());
FWIW Lists
Lists.reverse(a);
所有集合
Collections.reverse(a);
这是我如何对一个原始类型 int 数组进行排序的方法。
int[] intArr = new int[] {9,4,1,7};
Arrays.sort(nums);
Collections.reverse(Arrays.asList(nums));
结果:
[1, 4, 7, 9]
List<String> items = new ArrayList<>();
items.add("item01");
items.add("item02");
items.add("item03");
items.add("item04");
items.add("item04");
items.stream()
.sorted()
.forEach(item -> System.out.println(item));
items.stream()
.sorted(Comparator.reverseOrder())
.forEach(item -> System.out.println(item));
// our initial int[] array containing primitives
int[] arrOfPrimitives = new int[]{1,2,3,4,5,6};
// we have to convert it into array of Objects, using java's boxing
Integer[] arrOfObjects = new Integer[arrOfPrimitives.length];
for (int i = 0; i < arrOfPrimitives.length; i++)
arrOfObjects[i] = new Integer(arrOfPrimitives[i]);
// now when we have an array of Objects we can use that nice built-in method
Arrays.sort(arrOfObjects, Collections.reverseOrder());
arrOfObjects
现在是{6,5,4,3,2,1}
。如果您有一个除了int以外的其他东西的数组 - 请使用相应的对象代替Integer
。
对一个整型数组进行降序排列的简单方法:
private static int[] descendingArray(int[] array) {
Arrays.sort(array);
int[] descArray = new int[array.length];
for(int i=0; i<array.length; i++) {
descArray[i] = array[(array.length-1)-i];
}
return descArray;
}