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

狼烟的烟 2018-08-30 06:00:58
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.....

有大神能帮忙分析下可能是哪里给错了这个数据吗?
...全文
75 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
狼烟的烟 2018-08-30
  • 打赏
  • 举报
回复
if (HeroModelConfig.getHeroModelsSize() != heroMap.size())

因为这个内容导致出现数据没有初始化,默认为state是NONE

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧