news 2026/7/14 13:16:23

list stream sort Comparator.nullsLast 避免空指针的正确用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
list stream sort Comparator.nullsLast 避免空指针的正确用法

list排序中经常是针对对象的某个字段排序,但是字段为null是处理起来比较麻烦,java中有针对此情况的api,下面做详细介绍。

代码案例

@TestpublicvoidtestListSort(){List<Book>bookList=newArrayList<>();bookList.add(newBook(null,"水浒传"));bookList.add(newBook(9,"钢铁怎样炼成的"));bookList.add(newBook(null,"百年孤独"));bookList.add(newBook(3,"三国演义"));bookList.add(newBook(18,"史记"));System.out.println("bookList = "+bookList);/* 整理升序,price为null的排在最后 */List<Book>bookList1=bookList.stream().sorted(Comparator.comparing(Book::getPrice,Comparator.nullsLast(Comparator.naturalOrder()))).collect(Collectors.toList());System.out.println("整理升序,price为null的排在最后:");System.out.println("bookList1 = "+bookList1);/* 整体升序,price为null的排在最前 */List<Book>bookList2=bookList.stream().sorted(Comparator.comparing(Book::getPrice,Comparator.nullsFirst(Comparator.naturalOrder()))).collect(Collectors.toList());System.out.println("整体升序,price为null的排在最前:");System.out.println("bookList2 = "+bookList2);/* 整体降序,price为null的排在最后 */List<Book>bookList3=bookList.stream().sorted(Comparator.comparing(Book::getPrice,Comparator.nullsLast(Comparator.reverseOrder()))).collect(Collectors.toList());System.out.println("整体降序,price为null的排在最后:");System.out.println("bookList3 = "+bookList3);/* 整体降序,price为null的排在最前 */List<Book>bookList4=bookList.stream().sorted(Comparator.comparing(Book::getPrice,Comparator.nullsFirst(Comparator.reverseOrder()))).collect(Collectors.toList());System.out.println("整体降序,price为null的排在最前");System.out.println("bookList4 = "+bookList4);}

Book类

@NoArgsConstructor@AllArgsConstructor@DatapublicclassBook{privateIntegerprice;privateStringname;}

运行结果

bookList=[Book(price=null,name=水浒传),Book(price=9,name=钢铁怎样炼成的),Book(price=null,name=百年孤独),Book(price=3,name=三国演义),Book(price=18,name=史记)]整理升序,price为null的排在最后:bookList1=[Book(price=3,name=三国演义),Book(price=9,name=钢铁怎样炼成的),Book(price=18,name=史记),Book(price=null,name=水浒传),Book(price=null,name=百年孤独)]整体升序,price为null的排在最前:bookList2=[Book(price=null,name=水浒传),Book(price=null,name=百年孤独),Book(price=3,name=三国演义),Book(price=9,name=钢铁怎样炼成的),Book(price=18,name=史记)]整体降序,price为null的排在最后:bookList3=[Book(price=18,name=史记),Book(price=9,name=钢铁怎样炼成的),Book(price=3,name=三国演义),Book(price=null,name=水浒传),Book(price=null,name=百年孤独)]整体降序,price为null的排在最前 bookList4=[Book(price=null,name=水浒传),Book(price=null,name=百年孤独),Book(price=18,name=史记),Book(price=9,name=钢铁怎样炼成的),Book(price=3,name=三国演义)]
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/14 13:16:20

数据库设计范式

数据库有6大范式&#xff0c;一般到BCNF范式就行了&#xff1b; 学生选课总表(学号,姓名,课程号,课程名,成绩,系名,系主任)&#xff0c;复合主键是&#xff08;学号&#xff0c;课程号&#xff09; 当前满足范式不满足下一级范式的原因下一步拆分动作1NF姓名、课程名等非主属性…

作者头像 李华
网站建设 2026/7/14 13:15:44

炉石传说终极自动化脚本:如何让日常任务效率提升73%

炉石传说终极自动化脚本&#xff1a;如何让日常任务效率提升73% 【免费下载链接】Hearthstone-Script Hearthstone script&#xff08;炉石传说脚本&#xff09; 项目地址: https://gitcode.com/gh_mirrors/he/Hearthstone-Script 还在为炉石传说日常任务的重复操作感到…

作者头像 李华
网站建设 2026/7/14 13:15:10

Fast-GitHub:网络边界革命,重塑中国开发者的GitHub体验

Fast-GitHub&#xff1a;网络边界革命&#xff0c;重塑中国开发者的GitHub体验 【免费下载链接】Fast-GitHub 国内Github下载很慢&#xff0c;用上了这个插件后&#xff0c;下载速度嗖嗖嗖的~&#xff01; 项目地址: https://gitcode.com/gh_mirrors/fa/Fast-GitHub 当代…

作者头像 李华
网站建设 2026/7/14 13:14:42

从“AI辅助”到“AI共生”:一位特级教师用ChatGPT重构整学期大纲的真实日志(含每日Prompt迭代记录+学生反馈原始数据)

更多请点击&#xff1a; https://codechina.net 第一章&#xff1a;从“AI辅助”到“AI共生”的范式跃迁 传统AI应用常以“工具化”姿态嵌入工作流——开发者调用API、配置提示词、等待输出&#xff0c;AI始终处于被动响应状态。而“AI共生”则要求系统具备上下文感知、意图推…

作者头像 李华
网站建设 2026/7/14 13:14:00

如何在openEuler开源之夏项目中配置NFS存储与Kubernetes持久化存储

如何在openEuler开源之夏项目中配置NFS存储与Kubernetes持久化存储 【免费下载链接】open-source-summer 开源之夏活动 openEuler 社区项目管理仓库 项目地址: https://gitcode.com/openeuler/open-source-summer 前往项目官网免费下载&#xff1a;https://ar.openeuler…

作者头像 李华