当前位置: 首页 > news >正文

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=三国演义)]
http://www.cnnetsun.cn/news/3371323.html

相关文章:

  • 数据库设计范式
  • 炉石传说终极自动化脚本:如何让日常任务效率提升73%
  • Fast-GitHub:网络边界革命,重塑中国开发者的GitHub体验
  • 从“AI辅助”到“AI共生”:一位特级教师用ChatGPT重构整学期大纲的真实日志(含每日Prompt迭代记录+学生反馈原始数据)
  • 如何在openEuler开源之夏项目中配置NFS存储与Kubernetes持久化存储
  • ct-oval 代码架构解析:深入理解安全漏洞扫描工具的模块化设计
  • 终极IPXWrapper指南:让Windows 10/11完美运行经典游戏联机
  • 5个核心功能:StreamFX完整指南 - 为OBS Studio打造专业级视觉效果
  • 工程结算技巧,吃透了够你用到老
  • OSS Browser:阿里云对象存储的桌面级管理革命
  • Flink CDC架构深度解析:构建企业级实时数据集成的最佳实践
  • 开发者必看:Earthdata Search本地部署与开发环境搭建指南
  • OnscripterYuri入门教程:如何快速在浏览器中运行视觉小说游戏
  • 纯NumPy手写计算图:从零构建可调试神经网络
  • ct-oval 社区贡献指南:如何参与项目开发和改进
  • python中的数据类型篇_1
  • 3分钟永久激活Windows和Office:KMS智能激活工具完全指南
  • Windows 7虚拟机安装VMware Tools受阻?深入解析VMCI驱动与SHA-2签名冲突的根源与解决之道
  • Keras-MMoE源码解读:深入理解MMoE层的实现细节和数学原理
  • B站视频下载神器:免费解锁大会员4K与充电专属内容
  • 主动学习实战:Awesome open data-centric AI框架提升标注效率
  • 计算机小程序毕设实战-面向海产品行业的产销信息化管理系统的设计与实现 海产品加工流程管控与线上销售平台的设计与实现【完整源码+LW+部署说明+演示视频,全bao一条龙等】
  • OpenGL 入门(一)—— 从零构建你的第一个着色器程序
  • unrpyc:5个步骤轻松掌握Ren‘Py脚本反编译工具完整指南
  • RedisFullCheck 与 RedisShake 集成:数据迁移后的完整性验证最佳实践
  • 如何用RVC语音转换工具打造专属AI歌手:5步快速上手完整指南
  • ChatGPT输出格式总翻车?这5个隐藏参数比temperature更重要(实测降低97.3%格式错误率)
  • 免费德州扑克GTO求解器Desktop Postflop:从零开始掌握游戏理论最优策略
  • 2026年AI大模型API网关选型:五大聚合平台并发、计费与运维深度拆解
  • 别急着换赛道:运维经验在 AI 项目里到底值多少?