Java List排序4种写法
•
算法结构
- 方式1:JAVA中我们可以使用java.util.Collections类的sort(List list)方法对list集合中的元素排序。
- 方式2:JDK8之后特别是lambda表达式的盛行,而且Collections的sort方法其实是调用了List接口自己的sort方法;所以可以使用List接口自己的sort方法排序
- 方式3:Stream流的sort方法写法
一:集合元素是基本类型包装类型
public static void main(String[] args) {
List numList=new ArrayList();
numList.add(999);
numList.add(123);
numList.add(456);
numList.add(66);
numList.add(9);
Collections.sort(numList); //使用Collections类的方法排序
numList.sort(new Comparator() {//使用List接口的方法排序
@Override
public int compare(Integer o1, Integer o2) {
return o1.compareTo(o2);
}
});
//lambda表达式实现List接口sort方法排序
numList.sort((num1,num2)->{return num1.compareTo(num2);});
System.out.println(numList);
}
二:对象的集合根据某个属性排序
例如:对User对象集合根据User类的age属性排序,默认是升序。不推荐,不推荐,不推荐
public static void main(String[] args) {
List numList=new ArrayList();
User u=new User();
u.setAge(12);
numList.add(u);
User u1=new User();
u1.setAge(34);
numList.add(u1);
User u2=new User();
u2.setAge(6);
numList.add(u2);
User u3=new User();
u3.setAge(99);
numList.add(u3);
//Collections类的sort方法对对象集合排序,要传集合和Comparator接口两个参数
Collections.sort(numList, new Comparator() {
@Override
public int compare(User o1, User o2) {
Integer age1= o1.getAge();
Integer age2= o2.getAge();
return age1.compareTo(age2);
}
});
//List接口自身的sort方法对对象集合排序,重写Comparator接口方法即可
numList.sort(new Comparator() {
@Override
public int compare(User u1, User u2) {
Integer age1= u1.getAge();
Integer age2= u2.getAge();
return age1.compareTo(age2);
}
});
//List接口的sort方法,lambda表达式写法
numList.sort((u4,u5)->{
Integer age1= u4.getAge();
Integer age2= u5.getAge();
return age1.compareTo(age2);
});
System.out.println(numList);
}
三:使用Stream流排序
1.首先你需要list.parallelStream().sorted 进行流处理,使用parallelStream可以充分调度多核CPU。
2.使用Comparator.comparing进行排序,reversed()进行倒序排列,thenComparing进行下一个排序。
3.Comparator.comparing()里面的内容,也是就是Object::getter,例如KeywordCounterDTO::getKeyword
4.最后格式化为需要的格式 List 是.collect(Collectors.toList()) , Map 是 .collect(Collectors.toMap(KeywordCounterDTO::getKey, KeywordCounterDTO::getValue))
根据年龄倒序排
public static void main(String[] args) {
List numList=new ArrayList();
User u=new User();
u.setAge(12);
numList.add(u);
User u1=new User();
u1.setAge(34);
numList.add(u1);
User u2=new User();
u2.setAge(6);
numList.add(u2);
User u3=new User();
u3.setAge(99);
numList.add(u3);
numList = numList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
}
先对学生的班级做排序,然后同班级做倒序
public static void main(String[] args) {
List numList=new ArrayList();
User u=new User();
u.setClass(1);
u.setAge(12);
numList.add(u);
User u1=new User();
u.setClass(1);
u1.setAge(34);
numList.add(u1);
User u2=new User();
u.setClass(2);
u2.setAge(6);
numList.add(u2);
User u3=new User();
u.setClass(2);
u3.setAge(99);
numList.add(u3);
numList = numList.parallelStream().sorted(
Comparator.comparing(User::getClass).reversed().thenComparing(User::getAge)
).collect(Collectors.toList());
}
当集合中存在null元素时,可以使用针对null友好的比较器,null元素排在集合的最前面:nullsFirst
public static void main(String[] args) {
List numList=new ArrayList();
User u=new User();
u.setClass(1);
u.setAge(12);
numList.add(u);
User u1=new User();
u.setClass(1);
u1.setAge(34);
numList.add(u1);
User u2=new User();
u.setClass(2);
u2.setAge(6);
numList.add(u2);
User u3=new User();
u.setClass(2);
u3.setAge(99);
numList.add(u3);
numList = numList.parallelStream().sorted(
Comparator.nullsFirst(User::getClass).reversed().thenComparing(User::getAge)
).collect(Collectors.toList());
}
部分参考:https://www.cnblogs.com/aikutao/p/15722475.html
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://www.net2asp.com/d38f05bf89.html
