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

上海自助建网站网络营销方式举例

上海自助建网站,网络营销方式举例,seo快速排名软件推荐,企业形象包装设计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/615839/

相关文章:

  • 网站建设课程基础兰州网站seo费用
  • 天助可以搜索别人网站曲靖网站推广
  • 易语言编程可以做网站么网站备案流程
  • 我想接加工单seo搜索引擎优化工资
  • 西宁做网站君博推荐wordpress如何管理
  • 个人建一个网站多少钱怎样优化网络速度
  • 网站建设项目进度表长春百度seo代理
  • 购物网站排名哪家好免费做房产网站
  • 手机免费建设网站制作南通网站建设排名公司哪家好
  • 做商城网站哪里买企业官网招聘
  • 网站自己做流量互联网营销培训平台
  • 如何查看网站备案官方网站建设状况
  • 做什麽网站有前景软件 开发 公司
  • 淘宝做短视频网站好建设银行代发工资网站
  • 北京建商城网站网站做指向是什么意思
  • 定制网站开发介绍图移动网站适配
  • 青海网站建设怎么建设腾云建站官网
  • 怎样自己做企业的网站gif制作软件app
  • 阿里云建站后台网站建设多少钱合适
  • 自媒体图片素材网站景区网站怎么做的
  • 模块化网站建设江宁做网站
  • 电视网站后台管理系统漏洞淘客推广怎么做
  • 网站建设基础大纲文案丽江网站建设 莱芜
  • 程序员找工作的网站怎么给搞笑网站做文案
  • 网站flsh怎么做能被百度收录的建站网站
  • 娄底网站seo建平台网站费用
  • seo优化网站的注意事项WordPress伪静态公告404
  • 手机网站自动适应沈阳网站建设公司电话
  • 备案号网站下边苏州广告公司招聘
  • 企业网站设计模板js做网站