我在java中有一个双精度的列表,我想按降序排序数组列表。

输入数组列表如下:

List<Double> testList = new ArrayList();

testList.add(0.5);
testList.add(0.2);
testList.add(0.9);
testList.add(0.1);
testList.add(0.1);
testList.add(0.1);
testList.add(0.54);
testList.add(0.71);
testList.add(0.71);
testList.add(0.71);
testList.add(0.92);
testList.add(0.12);
testList.add(0.65);
testList.add(0.34);
testList.add(0.62);

输出应该是这样的

0.92
0.9
0.71
0.71
0.71
0.65
0.62
0.54
0.5
0.34
0.2
0.12
0.1
0.1
0.1

当前回答

集合。sort允许您传递一个定义排序逻辑的Comparator实例。因此,我们可以简单地传递Collections.reverseOrder()来排序,而不是按自然顺序对列表进行排序,然后反转它:

// import java.util.Collections;
Collections.sort(testList, Collections.reverseOrder());

正如@Marco13所提到的,除了更习惯(可能更有效),使用倒序比较器可以确保排序是稳定的(这意味着当元素的顺序根据比较器相等时,它们的顺序不会改变,而倒序将改变顺序)

其他回答

如果您正在使用Java SE 8,那么这可能会有所帮助。

//create a comparator object using a Lambda expression
Comparator<Double> compareDouble = (d1, d2) -> d1.compareTo(d2);

//Sort the Collection in this case 'testList' in reverse order
Collections.sort(testList, Collections.reverseOrder(compareDouble));

//print the sorted list using method reference only applicable in SE 8
testList.forEach(System.out::println);

使用java.util.Collections类的util方法,即

Collections.sort(list)

事实上,如果你想排序自定义对象你可以使用

Collections.sort(List<T> list, Comparator<? super T> c) 

参见集合API

使用lambdas (Java8),并将其分解到最基本的语法(JVM将在这种情况下推断大量的语法),你会得到:

Collections.sort(testList, (a, b) -> b.compareTo(a));

更详细的版本:

// Implement a reverse-order Comparator by lambda function
Comparator<Double> comp = (Double a, Double b) -> {
    return b.compareTo(a);
};

Collections.sort(testList, comp);

使用lambda是可能的,因为Comparator接口只有一个方法要实现,因此VM可以推断正在实现哪个方法。由于参数的类型可以推断,所以不需要声明(即(a, b)而不是(Double a, Double b)。并且由于lambda体只有一行,并且该方法被期望返回一个值,因此返回值是推断出来的,不需要花括号。

|*|

import java.util.Collections;

|=>排序Asc顺序:

Collections.sort(NamAryVar);

|=>

Collections.sort(NamAryVar, Collections.reverseOrder());

|*|颠倒列表顺序:

Collections.reverse(NamAryVar);

你可以这样做:

List<String> yourList = new ArrayList<String>();
Collections.sort(yourList, Collections.reverseOrder());

集合有一个默认的比较器可以帮助你。

另外,如果你想使用一些Java 8的新特性,你可以这样做:

List<String> yourList = new ArrayList<String>();
yourList = yourList.stream().sorted(Collections.reverseOrder()).collect(Collectors.toList());