数据刷新问题,null值判断会导致数据错乱.一个不正确的判断引发的血案.

狼烟的烟 狼烟的烟 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
if (HeroModelConfig.getHeroModelsSize() != heroMap.size()) {
HeroModelConfig.getAllHeroModel().stream().forEach(model -> {
UserHero userHero = heroMap.get(model.getId());
if (userHero == null) {
userHero = generateUserHero(model, null);
heroMap.put(model.getId(), userHero);
updated = true;
} else if (userHero.getSkinId() <= 0) {
userHero = generateUserHero(model, userHero.getSkinMap());
userHero.setState(HeroHaveStateEnum.NONE.getState());
heroMap.put(userHero.getHeroId(), userHero);
updated = true;
} else {
userHero.setState(HeroHaveStateEnum.ALREADY_HAVE.getState());
heroMap.put(userHero.getHeroId(), userHero);
updated = true;
}
});
}

上面的代码逻辑:
遍历所有的hero原型,将玩家的数据heroMap中
没有的对象(userHero==null条件)初始化,并存储,初始化默认userHero的State字段为NONE;
其他情况:
userHero不为null,但是在skinId <=0 (此时可能出现getSkinId为null)时,设置玩家没有这个英雄,setState为NONE;
else情况会将这个内容设置为userHero的状态为Already_HVAE.

测试时导入线上数据进行数据的清洗,触发逻辑为玩家登录即执行上面代码,测试Ok.
上线后出现部分玩家的数据出现了全部将玩家数据洗成了NONE.....

有大神能帮忙分析下可能是哪里给错了这个数据吗?
...全文

相关推荐

C/C++中结构体与二进制文件读写实战详解

回顾全文,我们走过了一条完整的结构体持久化之路:基础篇:学会正确使用、校验fwrite返回值、确保fclose被调用;进阶篇:理解内存对齐带来的填充问题,合理使用;高阶篇:应对大端小端差异,统一采用网络字节序;大师篇:加入魔数、版本号、CRC32,打造坚如磐石的数据格式;实战篇:封装通用框架,实现一次编写,处处可用。这些看似琐碎的知识点,恰恰是区分普通程序员和系统级工程师的关键所在。下次当你看到别人随随便便。

爱吃红豆沙的公子

126、LVGL自定义控件内存管理

<think>如果是用户请求生成摘要。注意:根据内容生成≤150字文章摘要,中文。需要涵盖核心问题:LVGL自定义控件内存分配释放混乱导致碎片泄漏/崩溃;三种死法+解决方案;正确模板;监控和清理。但摘要≤150字。要求 "根据以下内容生成≤150字的文章摘要" 需简洁。 主要点:LVGL自定义控件中混用lv_mem和标准free、事件回调不释放、样式生命周期错乱,导致内存泄漏、碎片率飙高、看门狗复位;应统一lv_mem_alloc/free,在析构事件中释放资源,且勿调用lv_obj_del,定期用监控AP

欢畅科技

避坑指南:EasyPoi Word模板导出常见“坑”与填坑实录

本文详细解析了使用EasyPoi导出Word模板时的常见问题与解决方案,包括空格与特殊字符处理、模板标记失效、动态内容边界情况等。通过实战案例和代码示例,帮助开发者避开常见陷阱,提升导出效率和稳定性。特别针对EasyPoi版本兼容性和性能优化提供了专业建议。

苦行僧2.0

多维聚合四大操纵范式:维度折叠、轴向旋转、粒度锚定与空间插值

多维聚合是现代数据分析的核心能力,本质是在高维数据立方体上进行结构化变形与语义对齐。其底层原理涉及维度正交性维护、粒度一致性保障及稀疏性处理,技术价值在于支撑实时OLAP、宽表构建与下钻分析等关键场景。常见操作如GROUPING SETS、PIVOT/UNPIVOT、WINDOW函数和ROLLUP并非语法技巧,而是对应维度折叠、轴向旋转、粒度锚定与空间插值四大工程范式。本文结合电商大促、金融风控与IoT时序等真实案例,解析如何避免NULL吞噬SUM、维度爆炸与ROLLUP幻影行等高频陷阱,强调在聚合前完成业

aikunjiao3421

Java强制类型转换深度解析:从ClassCastException到内存泄漏的避坑指南

强制类型转换是Java类型系统的核心机制之一,它连接着编译时类型检查与运行时类型信息(RTTI)。其原理在于开发者向编译器做出“类型承诺”,JVM则在运行时验证该承诺是否成立,验证失败即抛出ClassCastException。这项技术的价值在于允许程序在继承体系与泛型擦除的约束下进行灵活的类型操作,但误用会导致数据静默损坏、内存泄漏等严重问题。在工程实践中,强制类型转换广泛应用于处理遗留代码、框架集成、数据反序列化等场景,尤其是在处理集合类型转换和自动装箱拆箱时,必须结合instanceof检查与防御性编

anfeng3664
评论 1
收藏 已收藏
分享
返回顶部
狼烟的烟
Java EE 67,535 成员 225,843 内容