Java 如何对ArrayList排序<;长期>;按降序排列?
如何在Java中按降序对Java 如何对ArrayList排序<;长期>;按降序排列?,java,Java,如何在Java中按降序对数组列表进行排序?排序,然后反向排序 正常排序并使用以下是您的列表的一种方法: list.sort(null); Collections.reverse(list); 或者,您可以实现自己的排序,并消除反向步骤: list.sort((o1, o2) -> o2.compareTo(o1)); 或者更简单地使用,因为您只是在倒车: list.sort(Collections.reverseOrder()); 通过使用带有提供降序的比较器的Collections
数组列表进行排序?排序,然后反向排序 正常排序并使用以下是您的列表的一种方法
:
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表情摇滚在这里
如果您需要一个多行逻辑来比较a和b,您可以这样编写
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));