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

成都武侯区网站建设网站开发工程师学什么

成都武侯区网站建设,网站开发工程师学什么,个人网站托管,ppt怎么做 pc下载网站Java 8中的stream在项目开发中被同学们用的风生水起#xff0c;当然大家也踩了不少坑。下面我就来说说Collections.toMap在项目使用中踩的坑#xff0c;避免大家重复被坑。 一.介绍Collectors.toMap Collectors.toMap 是 Java 8 中的一个收集器#xff0c;它可以将流中的元… Java 8中的stream在项目开发中被同学们用的风生水起当然大家也踩了不少坑。下面我就来说说Collections.toMap在项目使用中踩的坑避免大家重复被坑。 一.介绍Collectors.toMap Collectors.toMap 是 Java 8 中的一个收集器它可以将流中的元素转换为 Map 对象其中每个元素的 key 由指定的函数生成。 当我们使用 Collectors.toMap 方法时可能会遇到重复的 key 问题这是因为我们在将元素转化为 Map 对象时如果两个元素具有相同的 key则会发生冲突抛出异常。 还可能会遇到value为null的问题这是因为我们在将元素转化为 Map 对象时toMap最终是调用了Map.merge方法merge方法不允许value为null 导致的异常抛出。 二.问题复现与分析以及解决方案 1、Collectors.toMap的key重复问题 问题复现 public static void main(String[] args) {ListBenefitModel benefitModelList new ArrayList();benefitModelList.add(new BenefitModel(123, 积分权益));benefitModelList.add(new BenefitModel(123, 现金权益));MapString, String benefitMap benefitModelList.stream().collect(Collectors.toMap(BenefitModel::getBenefitId, BenefitModel::getBenefitName));System.out.println(JSON.toJSONString(benefitMap));} 运行结果 原因分析 查看Collectors.toMap源码如下 toMap最终是调用了Map.merge方法传入的mergeFunction是throwingMerger直接抛出异常日志信息使用的是第一个参数u。传入的mapSupplier是HashMap对象HashMap::new。所以最终会调用到HashMap.merge。 而在HashMap.merge中对于mergeFunction的应用如下 在HashMap.merge的语义中mergeFunction用于合并value比如对于key的计数可以使用map.merge(key, 1, Integer::sum)。若不存在则置1存在则1。这里的入参是oldValue和newValue。 所以最终传递给throwingMerger的两个参数就不是k-v了。所以报错的所谓Duplicate key其实是oldValue。 解决方案 保证toMap的key不重复调用重载方法主动指定当key重复时需要做的合并操作合并规则可以根据业务需要自定义 于是上面重复key的代码优化后为:(合并规则重复key出现时取后面的前面的丢弃) public static void main(String[] args) {ListBenefitModel benefitModelList new ArrayList();benefitModelList.add(new BenefitModel(123, 积分权益));benefitModelList.add(new BenefitModel(123, 现金权益));MapString, String map benefitModelList.stream().collect(Collectors.toMap(BenefitModel::getBenefitId, BenefitModel::getBenefitName,(k1, k2) - k2));System.out.println(JSON.toJSONString(map));} 高版本JDK的修复措施 重复key这个问题在后续版本中得到修复比如在JDK 11中的处理。 2、Collectors.toMap的value值为null问题 问题复现 public static void main(String[] args) {ListBenefitModel benefitModelList new ArrayList();benefitModelList.add(new BenefitModel(123, 积分权益));benefitModelList.add(new BenefitModel(124, null));MapString, String benefitMap benefitModelList.stream().collect(Collectors.toMap(BenefitModel::getBenefitId, BenefitModel::getBenefitName));System.out.println(JSON.toJSONString(benefitMap));} 运行结果 原因分析 有问题看源码查看Collectors.toMap源码如下 toMap最终是调用了Map.merge方法而在HashMap.merge中对于value的应用如下 在HashMap.merge的语义中value使用前需要进行判空处理null直接抛出异常NullPointerException。 解决方案 方案1先把value为null的数据过滤掉再用Collectors.toMap。 MapString, String map2 benefitModelList.stream().filter(m - m.getBenefitName() ! null).collect(Collectors.toMap(BenefitModel::getBenefitId, BenefitModel::getBenefitName)); 方案2查资料评价度最好的方案如下。其实跟你方案1中思路-手动foreach一毛一样。 MapString, String map2 benefitModelList.stream().collect(HashMap::new, (m, v) - m.put(v.getBenefitId(), v.getBenefitName()),HashMap::putAll); 高版本JDK的修复措施 Collectors.toMap使用时value值为null这个问题在Java 11中仍然存在。可能value为null这种数据很少见促使解决过程比较缓慢。 三、Collectors.toMap使用总结 综上所以在使用Collectors.toMap时需要记住几点 1、key不能有重复否则会报错IllegalStateException: Duplicate key因为Map的key不能重复。 2、value不能为空否则报错NullPointerException。 看完了本文你可以去搜搜你的项目代码中使用Collectors.toMap的地方有没有可能踩上面的坑。不要说你的业务数据不会出现重复key的数据不会出现value值null的情况上百万的业务数据什么情况都会有的。 参考资料java - Ignore duplicates when producing map using streams - Stack Overflow java - NullPointerException in Collectors.toMap with null entry values - Stack Overflow
http://www.zqtcl.cn/news/988309/

相关文章:

  • 网站内容的创新wordpress美食主题
  • 程序员做游戏还是做网站好雅安移动网站建设
  • wordpress伪静态大学seo诊断网站免费诊断平台
  • 企业网站模板下载软件商务网站规划与建设心得
  • 做网站的像素是多少钱郑州公司网页
  • 北京游戏网站建设特殊符号网站
  • c 网站开发技术代注册公司要多少钱
  • 设计师参考效果图网站如何写网站建设实验结果分析
  • 网站备案 营业执照做企业网站注意些啥
  • 网站建设公司济南网络教学平台昆明理工大学
  • 原网站开发新功能世赛网站开发
  • 做一款小程序需要多少钱凡科的网站做seo比较难
  • 北京网页设计与网站建设最专业的手机网站建设
  • 做一个网站广州网站备案拍照
  • 做平面图片的网站wordpress批量添加连接
  • 做ppt哪些网站的图片质量高做电商网站需要多少时间
  • 个人网站模板源码wordpress流动公告
  • html5 手机 网站盘锦建设工程信息网站
  • 高端企业网站定制公司wordpress喜欢_赏_分享
  • 网站开发推广方案策划书开发公司移交给物业资料说明
  • 做响应式网站的菜单中国造价网官网
  • 爱心捐赠网站怎么做中国机械网官网
  • 好的ftp网站微信小程序开发基础
  • 西安 网站 公司wordpress+帖子置顶
  • 广州开发网站服务上海千途网站建设
  • 网站建设功能分为几种百度搜索数据
  • 电影网站模板html微信开发者代码管理
  • 小程序ui界面设计手机优化大师官网
  • 佳木斯市建设局网站网络游戏名
  • 建筑钢结构网站汉阳网站建设哪家便宜