java duplicate key_Stream 操作 Duplicate key问题

文章讲述了在用户订单查询系统中,为分销买家单添加供应商信息的需求。开发者面临批量调用限制和Stream流操作时遇到DuplicateKey问题。通过Java8的Collectors类和自定义处理策略,解决了键值冲突,提高了时间效率。
摘要由CSDN通过智能技术生成

背景:有一个用户订单查询首页(默认查询最近20条订单同时支持多条件查询),订单有多种,比如分销单,买家单,活动单等等,现在有一个需求,对于分销买家单需要添加供销商的一个信息。通过SupplierShopId作为参数 调用远端接口可以获取SupplierShopName。

开发思考:由原先的单次掉用修改为批量调用,店铺方面给的批量查询接口最大支持查询量为20条,对于多条件查询如果修改pageSize 需要多次调用,这边需要获取分销买家单进行数量计算,所以首先需要获取分销买家单数量。这边使用流操作先进行一次业务标判断过滤出符合条件的单子。获取到单子进行批量接口调用计算,将调用返回结果添加进入list集合里面。list的对象类型为定义的一个bo(拥有店铺id和店铺别名两个属性)最简单的方法是使用两个for循环,将bo中的店铺id和list中每个对象的店铺id 进行匹配,放入特定ordertail中。考虑时间效率使用map进行优化key 为店铺id ,value为店铺名字

遇到坑点:Stream 流操作后报错 Duplicate key

stream()

.collect(

Collectors.toMap(ShopMetaInfo::getKdtId, ShopMetaInfo::getShopName));

复制代码

原因:

多个分销单可能存在同一个供货商情况。

解决方案:

在java8中Collectors类中的tomap方法提供了我们将数据转换成Map的封装,往往在我们应用2个参数的(我们声明Key和Value很直接如下图)前提是key不能重复

b7fb73fb497e2e8e0c3eb9fb78034be9.png

其实java8已经给我们提供了解决的方式: 方法的第三个参数体现的

其实java8已经给我们提供了解决的方式: 方法的第三个参数体现的

2d031ebb7080c5463960689d63a98bc2.png

java8处理思路:即 两个key相同时 只能有一个key存在,那对应的value如何处理? value就是这样处理(我们自己来写方法体,我只是简单的拿逗号拼接下)

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java.lang.IllegalStateException: Duplicate key异常是指在使用Java编程语言时,出现了重复键的异常。重复键的意思是在使用键值对的数据结构时,键的值不能重复,否则会引发该异常。这个异常通常是由于在使用集合类时,向一个已经存在的键中插入了相同的键值对所导致的。具体来说,这个异常可能是由于使用了类似于HashMap或LinkedHashMap等可以存储键值对的集合类,并且向这个集合中插入了重复的键值对。如果在代码中出现了这个异常,可以通过检查代码逻辑,确保没有重复插入相同的键值对或者确保使用的集合类支持键的唯一性来解决这个问题。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [java.lang.IllegalStateException: Duplicate key,异常](https://blog.csdn.net/weixin_40873693/article/details/124659750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [Stream ToMap(Collectors.toMap) 实践](https://blog.csdn.net/xiaolulululululu/article/details/86636203)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [Java异常之—-Caused by: java.lang.IllegalStateException: Method has too many Body parameters](https://download.csdn.net/download/weixin_38551143/14883721)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值