Java List排序4种写法整理
作者:悟能的师兄
这篇文章主要给大家介绍了关于Java List排序4种写法整理的相关资料,在有的时候我们会需要对List进行排序,在Java中如何实现呢,本文记录一下Java中对List的几种排序方式,需要的朋友可以参考下
一:集合元素是基本类型包装类型
public static void main(String[] args) { List<Integer> 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<Integer>() {//使用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<User> 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<User>() { @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<User>() { @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<User> 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<User> 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<User> 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.jb51.net/article/232963.htm
总结
到此这篇关于Java List排序4种写法整理的文章就介绍到这了,更多相关Java List排序内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!