文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Java List排序4种写法

2023-08-31 21:17

关注
  1. 方式1:JAVA中我们可以使用java.util.Collections类的sort(List list)方法对list集合中的元素排序。
  2. 方式2:JDK8之后特别是lambda表达式的盛行,而且Collections的sort方法其实是调用了List接口自己的sort方法;所以可以使用List接口自己的sort方法排序
  3. 方式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() {@Overridepublic 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() {@Overridepublic 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流排序

首先你需要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://blog.csdn.net/yexiaomodemo/article/details/130063971

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯