发布时间:2026/7/27 15:12:49
判断 java 8 Set null 和 非空 但是size()=0 在 Java 8 中判断一个Set是否为null、是否为空集size() 0但非null核心就是分两步走先判断是否为null再判断是否为空。一、常见写法最常用双重判空安全写法javaSetLong set getSet(); if (set null) { System.out.println(Set 是 null对象不存在); } else if (set.isEmpty()) { System.out.println(Set 非 null但是空集size 0); } else { System.out.println(Set 非 null且有元素size set.size()); }一行式判空适用于需要快速确认是否有数据javaif (set ! null !set.isEmpty()) { // 有数据 } else { // 无数据可能是 null 也可能是 empty }二、nullvsempty行为对比状态代码示例set nullset.isEmpty()可安全调用nullSetLong set null;✅ true❌ 抛 NPE❌空集SetLong set new HashSet();❌ false✅ true✅有元素SetLong set new HashSet(Arrays.asList(1L, 2L));❌ false❌ false✅三、实际应用场景场景1方法返回 Set调用方安全使用javapublic void processIds(SetLong ids) { // 防御性编程先判 null再判空 if (ids null || ids.isEmpty()) { System.out.println(没有数据需要处理); return; } for (Long id : ids) { System.out.println(处理: id); } }场景2从数据库查询返回的 SetjavaSetLong orderIds orderService.findOrderIdsByUser(userId); // 很多框架如 Spring Data JPA、MyBatis查询不到数据时返回空集合而不是 null if (orderIds.isEmpty()) { System.out.println(该用户没有订单); } else { System.out.println(共有 orderIds.size() 个订单); }场景3结合你之前的 Feign 调用场景javaSetLong organizationIds organizationService.getOrgIds(); // 判断是否为空集 if (organizationIds ! null !organizationIds.isEmpty()) { // 传入 SQL 的 IN 子句 sql.append(AND organization_id IN (:organizationIds)); query.setParameter(organizationIds, organizationIds); } else { // 不添加 IN 条件避免生成 IN () 导致 SQL 错误 }四、工具类封装推荐如果项目中频繁判空可以用 Hutool 或自定义工具类使用 Hutool你项目已引入javaimport cn.hutool.core.collection.CollUtil; if (CollUtil.isNotEmpty(organizationIds)) { // 非 null 且非空 }自定义工具类javapublic class CollectionUtils { public static boolean isEmpty(Set? set) { return set null || set.isEmpty(); } public static boolean isNotEmpty(Set? set) { return !isEmpty(set); } } // 使用 if (CollectionUtils.isNotEmpty(organizationIds)) { // 有数据 }五、nullvsempty的最佳实践原则说明方法返回值优先返回空集合如Collections.emptySet()而不是null减少调用方判空负担方法入参如果业务不允许null用NotNull注解 提前校验或在方法内判空SQL 拼接传入IN子句前务必检查!set.isEmpty()避免生成IN ()导致语法错误使用工具类统一用CollUtil.isNotEmpty(set)等工具方法代码更简洁六、总结需要判断的场景推荐写法需要区分 null 和 emptyif (set null) { ... } else if (set.isEmpty()) { ... }只关心是否有数据if (set ! null !set.isEmpty()) { ... }使用 Hutoolif (CollUtil.isNotEmpty(set)) { ... }SQL 传入 IN 前判断if (set ! null !set.isEmpty()) { sql.append(... IN (:ids)); }关键点null和empty是两种完全不同的状态null对象不存在调用任何方法都会抛 NPEempty对象存在但无元素isEmpty()返回true

相关新闻

2026/7/27 15:12:49

终极量化投研框架:qstock如何用3行代码重构A股数据获取体验

终极量化投研框架:qstock如何用3行代码重构A股数据获取体验 【免费下载链接】qstock qstock由“Python金融量化”公众号开发,试图打造成个人量化投研分析包,目前包括数据获取(data)、可视化(plot)、选股(stock)和量化回…

2026/7/27 16:12:54

Unidbg实战:逆向分析短视频App SO加密算法与模拟执行

1. 项目概述:当逆向分析遇上“沙盒”在移动安全与逆向工程领域,我们常常面临一个棘手的问题:目标应用的核心加密算法被封装在原生共享库(SO文件,即Android的.so或iOS的.dylib/.a)中。传统的动态调试需要真机…

2026/7/27 16:12:54

Kali Linux中Base64编码原理、实战技巧与安全攻防应用

1. 项目概述:为什么要在Kali Linux里玩转Base64?如果你经常在Kali Linux里折腾渗透测试、安全研究或者CTF比赛,Base64编码对你来说绝对不陌生。它就像安全领域里的“瑞士军刀”,无处不在。你可能用它来隐藏Payload,用它…

2026/7/27 16:12:54

2026年广州做小程序的公司有哪些?SaaS平台、本地定制与费用对比

很多广州企业搜索“广州做小程序的公司有哪些”,通常希望找到能够沟通需求、控制预算并尽快上线的服务商。但选择小程序公司不能只看办公地点和首次报价,还要判断产品路线是否匹配业务。如果只是企业展示、预约、表单留资或活动入口,标准化 S…

2026/7/27 16:12:54

你看到的“景观”背后,是一整套殡葬设计逻辑

家属走进一座墓园,看到的是树、是花、是路、是石头。他们不知道的是,这些“好看”的背后,是一整套复杂的设计逻辑。 浙江温州瞿溪柳岙山城市公益性公墓的景观背后,是“最小开挖、最大保绿”的逻辑。项目依托天然山体环境&#xff…

2026/7/27 16:12:54

Claude模型知识蒸馏实战:从原理到部署的完整指南

今天来看一个很有意思的技术进展:在 Codex 之后,现在你可以在 Claude 上"蒸馏"自己了。这听起来可能有点抽象,但简单来说,这是一种让大型语言模型(LLM)通过知识蒸馏技术,把大模型的能…

2026/7/27 9:04:58

PDF合并与动态水印的工程化方案:2026国内免费工具实测对比

一、背景与测试方案 在实际项目交付中,PDF文件合并与版权保护水印的叠加是一个高频但容易被低估的技术需求。典型的处理链路涉及:多源PDF的文件流合并、页面级水印渲染(含透明度混合与图层叠加)、输出文件体积控制。看似简单的操作…

2026/7/27 0:01:12

xcku5p-ffvb676-2-i 设计 RoCEv2 时 constraints.xdc 配置依据核查记录

constraints.xdc 配置依据核查记录 被核查文件:fpga/vitis/xcku5p/build/constraints/constraints.xdc 目标板卡:RK-XCKU5P-F V1.2(搭载 xcku5p-ffvb676-2-i) 移植母本:fpga/pynq/rfsoc-pynq/build/constraints/constraints.xdc(NVIDIA Holoscan Sensor Bridge 参考工程)…

2026/7/27 0:01:12

TMS320C54x DSP内存映射与I/O模拟配置实战指南

1. 项目概述与核心价值在嵌入式系统开发,尤其是DSP这类资源受限、架构独特的处理器上,内存映射配置和I/O模拟是每个开发者都必须跨越的一道坎。这不仅仅是调试器里的几个菜单选项或命令行参数,它直接关系到你的程序能否在目标板上正确运行、能…

2026/7/27 3:13:33

3个高效策略:快速掌握Axure中文界面配置

3个高效策略:快速掌握Axure中文界面配置 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在为Axure RP的英文界面感…