如何按降序排列ArrayList <long>?</long>

时间:2011-05-05 08:36:44

标签: java

如何按递减顺序对Java中的ArrayList<Long>进行排序?

14 个答案:

答案 0 :(得分:231)

以下是list的一种方式:

list.sort(null);
Collections.reverse(list);

或者你可以实现自己的Comparator来排序并消除相反的步骤:

list.sort((o1, o2) -> o2.compareTo(o1));

或者更简单地使用Collections.reverseOrder(),因为你只是在逆转:

list.sort(Collections.reverseOrder());

答案 1 :(得分:25)

Comparator<Long> comparator = Collections.reverseOrder();
Collections.sort(arrayList, comparator);

答案 2 :(得分:18)

您可以使用下面给出的以下代码;

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

或者如果您打算使用自定义比较器,可以按照下面的说明使用

Collections.sort(list, Collections.reverseOrder(new CustomComparator());

其中CustomComparator是比较器类,用于比较列表中存在的对象。

答案 3 :(得分:9)

Java 8

在java 8中这样做非常有趣和轻松

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

Lambda表达在这里摇滚!!!

如果您需要多个线路逻辑来比较 a b ,您可以像这样写

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

答案 4 :(得分:7)

正常排序并使用Collections.reverse();

答案 5 :(得分:2)

排序,然后反转。

答案 6 :(得分:2)

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

Collections.sort(lst,new Comparator<Long>(){
                public int compare(Long o1, Long o2) {
                    return o2.compareTo(o1);
                }
            });

答案 7 :(得分:2)

对于您的long值位于对象中某处的lamda,我建议使用:

.sorted((o1, o2) -> Long.compare(o1.getLong(), o2.getLong()))

甚至更好:

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

答案 8 :(得分:1)

Collections.sort()与提供降序的比较器一起使用。 请参阅Javadoc Collections.sort

答案 9 :(得分:1)

以下方法将按降序对列表进行排序,并处理“ null ”值,以防万一您有任何空值,然后 Collections.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);

        }
    });

答案 10 :(得分:0)

您还可以使用ArrayList而不是TreeSetcomparator进行排序。这是我之前对整数数组的问题的一个例子。我正在使用&#34;数字&#34;作为ArrayList的占位符名称。

     import.java.util.*;
        class MyClass{
        public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        ArrayList<Integer> numbers = new ArrayList<Integer>(); 

        TreeSet<Integer> ts = new TreeSet<Integer>(numbers);
        numbers = new ArrayList<Integer>(ts);
        System.out.println("\nThe numbers in ascending order are:");
        for(int i=0; i<numbers.size(); i++)
        System.out.print(numbers.get(i).intValue()+" ");
        System.out.println("\nThe numbers in descending order are:");
        for(int i=numbers.size()-1; i>=0; i--)
        System.out.print(numbers.get(i).intValue()+" ");
    }
}

答案 11 :(得分:0)

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

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

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

另一种选择是了解地图的工作方式。很多时候,所谓的Map或HashMap背后都有一个基本概念。

例如。...您输入了一堆键值对,其中键是长键,当您添加所有元素时,您可以执行:.keys,它将返回给您自动排序列表。

这取决于您如何处理数据以及我认为应该如何继续进行排序和后续的反向操作

答案 12 :(得分:0)

比较器的比较方法可用于比较对象,然后方法reversed()可用于颠倒顺序-

list.stream().sorted(Comparator.comparing(Employee::getName).reversed()).collect(toList());

答案 13 :(得分:0)

使用List.sort()Comparator.comparingLong()

numberList.sort(Comparator.comparingLong(x -> -x));