Java 如何对ArrayList排序<;长期>;按降序排列?

Java 如何对ArrayList排序<;长期>;按降序排列?,java,Java,如何在Java中按降序对数组列表进行排序?排序,然后反向排序 正常排序并使用以下是您的列表的一种方法: list.sort(null); Collections.reverse(list); 或者,您可以实现自己的排序,并消除反向步骤: list.sort((o1, o2) -> o2.compareTo(o1)); 或者更简单地使用,因为您只是在倒车: list.sort(Collections.reverseOrder()); 通过使用带有提供降序的比较器的Collections

如何在Java中按降序对
数组列表进行排序?

排序,然后反向排序

正常排序并使用

以下是您的
列表的一种方法

list.sort(null);
Collections.reverse(list);
或者,您可以实现自己的排序,并消除反向步骤:

list.sort((o1, o2) -> o2.compareTo(o1));
或者更简单地使用,因为您只是在倒车:

list.sort(Collections.reverseOrder());

通过使用带有提供降序的比较器的
Collections.sort()
。 请参阅Javadoc以了解。

Comparator-Comparator=Collections.reverseOrder();
Collections.sort(arrayList,comparator);

实现我们自己的比较器的更通用的方法如下

Collections.sort(lst,new Comparator<Long>(){
                public int compare(Long o1, Long o2) {
                    return o2.compareTo(o1);
                }
            });
Collections.sort(lst,新的Comparator(){
公共整数比较(长o1,长o2){
返回o2.compareTo(o1);
}
});

以下方法将按降序对列表进行排序,并处理“null”值,以防万一,如果有空值,则集合。sort()将抛出NullPointerException

      Collections.sort(list, new Comparator<Long>() {
          public int compare(Long o1, Long o2) {
                  return o1==null?Integer.MAX_VALUE:o2==null?Integer.MIN_VALUE:o2.compareTo(o1);

        }
    });
Collections.sort(列表,新比较器(){
公共整数比较(长o1,长o2){
返回o1==null?整数。最大值:o2==null?整数。最小值:o2.compareTo(o1);
}
});

您可以使用以下代码:

Collections.sort(list, Collections.reverseOrder());
或者,如果您要使用自定义比较器,您可以使用下面给出的比较器

Collections.sort(list, Collections.reverseOrder(new CustomComparator());
其中CustomComparator是比较列表中存在的对象的comparator类。

Java8 在Java8中这样做既有趣又简单

Collections.sort(variants,(a,b)->a.compareTo(b));
Collections.reverse(variants);
Lambda表情摇滚在这里

如果您需要一个多行逻辑来比较ab,您可以这样编写

Collections.sort(variants,(a,b)->{
    int result = a.compareTo(b);
    return result;
});

您还可以使用
树集而不是
比较器对
数组列表
进行排序。下面是一个例子,来自我之前关于整数数组的一个问题。我正在使用“数字”作为
ArrayList
的占位符名称


import.java.util.*;
类MyClass{
公共静态void main(字符串[]args){
扫描仪输入=新扫描仪(System.in);
ArrayList编号=新的ArrayList();
树集ts=新树集(编号);
编号=新阵列列表(ts);
System.out.println(“\n升序数字为:”);
对于(int i=0;i=0;i--)
System.out.print(number.get(i.intValue()+);
}
}

对于长值位于对象某处的lamdas,我建议使用:

.sorted((o1, o2) -> Long.compare(o1.getLong(), o2.getLong()))
或者更好:

.sorted(Comparator.comparingLong(MyObject::getLong))

所以,我想提出一些我认为很重要的事情,我认为你应该考虑一下。运行时和内存。假设您有一个列表,并希望对其进行排序,那么您可以,有一个内置的排序,或者您可以开发自己的排序。然后你说,你想把清单倒过来。这就是上面列出的答案

但是,如果要创建该列表,最好使用不同的数据结构来存储它,然后将其转储到数组中

堆就是这样做的。您过滤数据,它将处理所有内容,然后您可以弹出对象中的所有内容,并对其进行排序

另一个选择是了解地图是如何工作的。很多时候,一个Map或HashMap作为事物的名称,背后都有一个潜在的概念

例如。。。。输入一组键-值对,其中键是长的,当添加所有元素时,可以执行:
.keys
,它会自动返回一个排序列表


这取决于您之前如何处理数据,以及我认为您应该如何继续排序和后续反转

比较器的比较方法可用于比较对象,然后方法
反转()
可用于反转顺序-

list.stream().sorted(Comparator.comparing(Employee::getName).reversed()).collect(toList());
使用
List.sort()
Comparator.comparingLong()


l1>l2-1:l1==l2?0:1
这个代码太荒谬了。然后使用
o1.compareTo(o2)
。@ilya:哦,是的,很好,尽管它需要是
o2.compareTo(o1)
here:)list.sort(Collections.reverseOrder());对于
list.sort((o1,o2)->o2.compareTo(o1))
只使用该变量声明上的泛型参数。我认为如果我们将其更改为b.compareTo(a),我们将不需要反转集合。@zawhtut,完全正确!刚才提到了reverse(),为了让您知道这些选项,您可以选择将long转换为long?但是
TreeSet
不存储重复的值。
.sorted(Comparator.comparingLong(MyObject::getLong))
list.stream().sorted(Comparator.comparing(Employee::getName).reversed()).collect(toList());
numberList.sort(Comparator.comparingLong(x -> -x));