Comparator排序空指针问题

Java,compareTo、compare方法的空指针异常的解析 // Double d1 = 0.2; // Double d2 = 0.3; // System.out.println(d1.compareTo(d2)); //-1 // Double d1 = null; // Double d2 = 0.3; // System.out.println(d1.c... 阅读详情

背景

项目是监控告警平台,会对多个系统进行监控,在某一系统存在下拉框子系统,通过选择不同子系统来查询不同的值班人员信息,告警情况等指标信息。每个子系统切换时都会正常出现告警指标,唯独有一个系统,点击后告警信息还有其他告警指标都有查询成功,唯独值班人员信息无法获取到,通过日志发现只提示个null,不得不吐槽下,上任写代码的同事,使用的e.getMessage(),使得详细异常没有完全输出,对于bug排查带来很多坑,又给更改了下日志输出…
在这里插入图片描述

分析

将日志明细打印输出后,发现了空指针问题所在:
在这里插入图片描述
排查思路:
1.报错信息是Comparator.comparing出现了空,且代码中是使用的getInteger,因而猜测是json串中,可能存在sort:0的情况。
2.有可能是代码没有考虑所有情况,sort允许为0,没有做到全面覆盖。

修复

方法一:将getInteger方法改为getString,然后再去使用Integer.ValueOf去获取对应的值。
方法二:使用Comparator.nullsLast(String::compareTo),来对空值进行处理。

实践

方法一:
使用getString的时候对于0还是会转成null,因此方法失效,不能使用。

方法二:调整为如下代码:
在这里插入图片描述
经验证,问题解决。

【集合排序】Java语言中实现集合排序的几种方式 有些场景下,可能需要对集合进行多个字段的排序,例如:先根据年龄排序,年龄相同的情况下,则再根据ID排序。一般情况下,我们不会使用自然排序,因为使用自然排序,那么排序规则就固定死了,失去了排序的灵活性。我们通常会使用带有参数的sorted()方法,然后传递一个Comparator比较器对象,灵活的指定自定义的排序规则。前面一种排序方式下,我们需要自己实现Comparator比较器方法,代码有些复杂化了,JDK中Comparator类提供了一些快速创建比较器的方法,我们可以直接拿来使用,简化代码的编写。 阅读详情

相关推荐

如何从零开始写小程序

看了这篇文章,即使让我现在就从头写一个能够正常运行的小程序,也没有原本想象中的那么难了。 在本文中,我们将会以一个具体的小程序为例,带领大家从零到一完成一个小程序的开发流程,并将这个小程序上传到 FinClip.com 进行小程序提审与上架操作。 我们新建了一个叫做「HelloWorld」的小程序,FIDE 在初始化小程序项目时,会自动在项目目录中补充对应所需要的项目文件。那不妨让我们先从小程序目录下的配置文件开始,逐渐揭开小程序的面纱。 使用 FIDE 编辑小程序 1. 认识 json 文件 在小程序项目

POHOU23的博客 4395

Comparator.comparing()与空指针异常

Java 中使用 Comparator.comparing() 出现的空指针问题

Blank_JK的博客 3287

别再傻傻分不清PBR和NPR了!从《原神》到《双城之战》,聊聊游戏里那些让你眼前一亮的渲染风格

本文深入解析了PBR(基于物理的渲染)与NPR(非真实感渲染)在游戏视觉风格中的应用差异,通过《原神》和《双城之战》的案例,展示了两种渲染技术如何创造出截然不同的艺术效果。从技术原理到实战案例,帮助读者理解如何根据项目需求选择合适的渲染风格。

weixin_30425949的博客 146

Comparator.comparing()实现中文排序及空指针处理

Comparator.comparing()实现中文排序及空指针处理的应用实例

DayDayUp 5013

Zemax实战录——非序列模式下的微透镜阵列仿真与优化

本文详细介绍了在Zemax非序列模式下进行微透镜阵列仿真的完整流程与优化技巧。文章重点阐述了从序列模式切换到非序列模式的必要性,并逐步指导如何搭建光源、阵列与探测器的仿真环境。核心在于通过调整圆锥系数等关键参数优化像差,并增加光线数以提升仿真精度与均匀性,为光学设计提供可靠依据。

weixin_28339967的博客 515

信息抽取实战:三元组抽取(限定领域 vs 开放领域)(附代码)

信息抽取实战:三元组抽取 目录信息抽取实战:三元组抽取一、限定领域的三元组抽取比赛介绍数据分析序列标注模型关系分类模型三元组提取总结开放领域的三元组抽取标注平台文本分类新数据进行三元组抽取总结参考文献 一、限定领域的三元组抽取   本项目将会介绍在2019语言与智能技术竞赛的三元组抽取比赛方面的一次尝试。由于该比赛早已结束,当时也没有参加这个比赛,因此没有测评成绩,我们也只能拿到训练集和验证集。但是,这并不耽误我们在这方面做实验。 比赛介绍   该比赛的网址为:http://lic2019.ccf.org.

南有芙蕖 2万+

Java Comparator.comparing比较导致空指针异常

Comparator.comparing(Department::getOrder) 原因: public static <T, U extends Comparable<? super U>> Comparator<T> comparing( Function<? super T, ? extends U> keyExtractor) { Objects.requireNonNull(keyExtractor); return

草宝虫的博客 2万+

Matplotlib字体警告终结者:为什么总提示DejaVu Sans?5种场景解决方案大全

本文深入解析Matplotlib中常见的DejaVu Sans字体警告问题,并提供5种典型场景的完整解决方案。从理解字体系统的三层架构和缓存机制,到解决中文显示、远程服务器部署、TeX渲染、缓存优化及生产环境配置等实际问题,帮助开发者彻底摆脱字体警告困扰,实现稳定可靠的数据可视化。

view3的博客 500

Comparator.comparing排序报空指针异常

Comparator.comparing排序报空指针异常

weixin_44513675的博客 3934

【ESP32-IDF】I2S音频协议实战:从PDM麦克风到PCM扬声器的全链路解析

本文深入解析ESP32-S3的I2S音频协议,从PDM麦克风采集到PCM扬声器输出的全链路实现。详细介绍了硬件PDM转PCM、Standard模式配置及混合模式协同工作,提供实战代码与性能优化建议,助力开发者高效完成嵌入式音频项目开发。

pea55的博客 886

AUTOSAR RTE配置实战:从ECU分区到Task映射的完整指南

本文提供了一份AUTOSAR RTE配置的完整实战指南。从创建ECU分区、定义OS任务,到实现Runnable Entity与Task的精确映射,详细解析了每一步的操作要点与常见陷阱。文章结合配置工具界面,旨在帮助开发者高效完成RTE配置,确保系统实时性与数据一致性,是掌握AUTOSAR核心开发流程的实用参考。

weixin_29228203的博客 484

Java List集合使用 Comparator.comparing 排序报空指针异常问题

前言 有时候对一个List集合的某个字段进行排序的时候会报错,问题就是排序的那个字段可能是个空值,那么下面就是处理这种问题的方式,亲自测试有效。 参考 点击可跳转:Java List集合使用 Comparator.comparing 排序报空指针异常问题

欢迎来到 ABin-阿斌的博客:写一生代码,创一世佳话,筑一览芳华。 2026

第02章:HSA-Runtime架构概览

摘要: 本章深入解析HSA Runtime的三层架构设计,包括公共API层(C语言接口)、核心实现层(C++业务逻辑)和驱动抽象层(硬件交互)。重点介绍了Runtime的核心组件(Agent、Queue、Signal、Memory)及其关系,以及初始化流程、配置选项和调试功能。通过学习,读者将掌握HSA Runtime的整体架构,为后续模块学习奠定基础。

图形/计算GPU的驱动与虚拟化技术分享园地 2916

Lambda表达式排序,出现空指针异常

问题描述:对象集合中,根据对象的某个属性进行升降排序时,未考虑对应属性的null值,导致出现空指针异常。 解决方法:Comparator.nullsFirst和Comparator.nullsLast List<User> nList = list.stream().sorted( Comparator.comparing(User::getCode, Comparator....

Flyer的后花园 2253

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Lambda表达式排序,解决空指针异常

问题描述:对象集合中,根据对象的某个属性进行升降排序时,未考虑对应属性的null值,导致出现空指针异常。解决方法:Comparator.nullsFirst和Comparator.nullsLast List<EquipOverrunRecord> recordList = equipOverrunRecordService.findAll(); recordList.stream...

qq_42714869的博客 4242

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Comparator.nullsLast 空指针问题

线上报了个NPE,定位问题是nullsLast排序时从map里取到的值为null导致,但既然使用了nullsLast说明开发在写代码时对空指针是有防御意识的,虽然实际没有起到预期的效果。仔细看了下代码发现大家对nullsLast/nullsFirst的理解并不深,有不少代码写法有问题,导致并不能起到想要的效果。

诗酒年华 3814

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Comparator 排序报 空指针异常

Comparator 排序报 空指针异常

w36680130的博客 619

list的stream方法排序中遇到空指针问题

在实际的项目开发中,有时候会使用list.stream().softed()方法进行排序,但是有时候会需要参数为空,就会报错空指针异常。如果是想放前面,就用first。

NewBeeMu的博客 826

Comparator Comparators Comparable Collections排序源码解析

起初,写了一行排序代码,空指针异常。有判空思想但对nullsLast理解是错误的,于是阅读了一下相关源码。

xzc的博客 304

Java8 stream sorted排序时包括null

开发过程中对象集合根据某个属性排序是常常遇到的情况,但有时排序会遇到对应属性值为null的情况,会报空指针异常。 查找stream.sorted源码看到有Comparator.nullsFirst和Comparator.nullsLast方法,使用方法如下: List<User> list = Lists.newArrayList(new User("Y", "YY"), new User("A", "AA"), new User(null, "CC")); list.stream().fo

小屁孩大帅-保密的博客 4263

Stream流的排序用法

通过以上例子我们可以发现Comparator.comparing(类::属性一).reversed();Comparator.comparing(类::属性一,Comparator.reverseOrder());两种排序是完全不一样的,一定要区分开来 1 是得到排序结果后再排序,2是直接进行排序,很多人会混淆导致理解出错,2更好理解,建议使用2。可以使用Comparator.nullsLast或者Comparator.nullsFirst来避免,nullsLast表示值为空时,排在最后,nullsFirs

默慊的博客 4412

Java技巧:优雅处理排序中的null值

Java的Comparator接口为对象比较和排序提供了强大的定制能力。然而,在实际应用中,当对象的属性可能为null时,就可能引发。为了避免这类问题,Java 8引入的和方法就派上了用场。这些方法能够帮助我们在进行排序操作时,将null值安全地放置在合适的位置。在本文中,我们学习了如何在Java中处理排序时的null值问题。通过和方法的使用,我们不仅避免了空指针异常,还保持了代码的简洁性和易读性。适当处理null值,可以让我们的代码更为健壯,减少运行时的错误,提高程序的质量和用户体验。

优秀码农的博客 1510

lambda多重排序+分页

List<DataSummaryDataEntity> newList = dataEntityList.stream() .sorted( Comparator.comparing(DataSummaryDataEntity::getTemplateId) .thenComparing(DataSummaryDataEntity::getFormId.

iloki的博客 436

Java8Stream数字和NULL如何排序

case List<Persion> list=new ArrayList<>(); list.add(new Persion(null,"a",2)); list.add(new Persion(null,"b",2)); list.add(new Persion(null,"c",3)); list.add(new Persion(null,"d",3)); list.add(new Persion(

John_D_B_Lee的博客 910
上一篇: 算法--正则表达式匹配
下一篇: Java 升级High-Level-REST-Client问题记录
CodersCoder
博客等级 码龄10年 90粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值