第一种写法:使用Collectors.toMap的方法,如果key重复会直接报错
第二种写法: 使用mergeFunction参数,可以取重复的key中的第一个或最后一个

方案1:#使用Collectors.toMap的方法,如果key重复会直接报错

List<TpLifecircleConsumeDO> list = new ArrayList<>();
TpLifecircleConsumeDO tpLifecircleConsumeDO = new TpLifecircleConsumeDO();
TpLifecircleConsumeDO tpLifecircleConsumeDO2 = new TpLifecircleConsumeDO();
tpLifecircleConsumeDO.setOrderSn("123");
tpLifecircleConsumeDO.setOrderSumprice(new BigDecimal("2.1"));
list.add(tpLifecircleConsumeDO);
tpLifecircleConsumeDO2.setOrderSn("123");
tpLifecircleConsumeDO2.setOrderSumprice(new BigDecimal("2.1"));
list.add(tpLifecircleConsumeDO2);方案1:#使用Collectors.toMap的方法,如果key重复会直接报错
Map<String, TpLifecircleConsumeDO> consumeDOMap = list.stream().distinct().collect(Collectors.toMap(TpLifecircleConsumeDO::getOrderSn, consumeDo -> consumeDo));
System.out.println(consumeDOMap);Exception in thread "main" java.lang.IllegalStateException: Duplicate key TpLifecircleConsumeDO[id=<null>,ext1=<null>,ext2=<null>,ext3=<null>,ext4=<null>,token=<null>,openid=<null>,remark=<null>,orderSn=123,bankType=<null>,discount=<null>,payToken=<null>,callBackUrl=<null>,merchantOrderSn=<null>,uid=<null>,mode=<null>,type=<null>,mchid=<null>,redId=<null>,userId=<null>,agentId=<null>,channel=<null>,payTime=<null>,payType=<null>,storeId=<null>,markread=<null>,printNum=<null>,redPreId=<null>,cashierId=<null>,payStatus=<null>,createTime=<null>,discountId=<null>,refundStatus=<null>,rechargeactId=<null>,preferentialId=<null>,repairOrderStatus=<null>,updateTimeAuto=<null>,fee=<null>,refund=<null>,cashFee=<null>,rateFee=<null>,redMoney=<null>,couponFee=<null>,orderPrice=<null>,commissionFee=<null>,discountMoney=<null>,orderSumprice=2.1,autowipingzero=<null>,additionalPrice=<null>,commissionRateFee=<null>,rechargeactAmount=<null>,preferentialAmount=<null>]at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)at java.util.HashMap.merge(HashMap.java:1254)at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)at java.util.stream.DistinctOps$1$2.accept(DistinctOps.java:175)at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)at com.fshows.lifecircle.datacore.service.facade.impl.MonthlyTableFacadeImpl.main(MonthlyTableFacadeImpl.java:554)

方案2: 使用mergeFunction参数,可以取重复的key中的第一个或最后一个


Map<String, TpLifecircleConsumeDO> consumeDOMap = list.stream().collect(Collectors.toMap(TpLifecircleConsumeDO::getOrderSn, consumeDo -> consumeDo, (key1, key2) -> key1));
System.out.println(consumeDOMap);源代码:
public static <T, K, U>
Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper,BinaryOperator<U> mergeFunction) {return toMap(keyMapper, valueMapper, mergeFunction, HashMap::new);
}public static <T, K, U, M extends Map<K, U>>
Collector<T, ?, M> toMap(Function<? super T, ? extends K> keyMapper,Function<? super T, ? extends U> valueMapper,BinaryOperator<U> mergeFunction,Supplier<M> mapSupplier) {BiConsumer<M, T> accumulator= (map, element) -> map.merge(keyMapper.apply(element),valueMapper.apply(element), mergeFunction);return new CollectorImpl<>(mapSupplier, accumulator, mapMerger(mergeFunction), CH_ID);
}

Collectors.toMap报错 :Duplicate key相关推荐

  1. JDK8中Collectors.toMap方法报Duplicate key xxx错误信息

    两种 list转map方式 方式一:这种方式 重复key的话会报错 Duplicate key xxx Map deviceDtoMap = JsonUtils.toList(deviceDtoLis ...

  2. postgres 保存报错duplicate key value violates unique constraint...解决方案_亲测有效

    postgres 保存报错duplicate key value violates unique constraint 解决方案 原因分析: 表名: A 表A的主键id 是由序列 x$seq 生成的 ...

  3. Collections.toMap 报错 空指针 key重复

    Collections.toMap作用 将list按照规则转成map. books.stream().collect(Collectors.toMap(Book::getIsbn, Book::get ...

  4. JDK8中Collectors.toMap方法报Duplicate key xxx错误信息

    今天在使用JDK8中的Collectors.toMap()方法报错,错误信息是Duplicate key xxx,很明显是因为key重复造成的,此时通过使用Collectors.toMap()的重载方 ...

  5. mysql 报错 Duplicate entry ‘xxx‘ for key ‘字段名‘

    有时候对表进行操作,例如加唯一键,或者插入数据(已经有唯一键),会报错 Duplicate entry...for key...原因是primary key(主键)或unique key(唯一键)的值 ...

  6. mysql 报错 Specified key was too long; max key length is 767 bytes,开启系统变量:innodb_large_prefix

    mysql 报错 Specified key was too long; max key length is 767 bytes 当mysql数据库的字符集使用了utf8mb4,就很容易在执行建表sq ...

  7. 使用 use_frameworks! 后项目YYCache库报错 Duplicate interface

    旧的项目更新库文件,新的库使用了@import,所以必须在pod中添加'use_frameworks! '.然后 YYCache 就报错 Duplicate interface- 修改库的导入方式,问 ...

  8. 前端报错duplicate attribute

    前端报错duplicate attribute 当出现这个错误的时候就预示着同一个属性在一个标签对里面重复出现了两遍,删掉一个就好了.

  9. 如何解决Collectors#toMap报Duplicate key xxx错误问题

    文章目录 前言 问题复现 解决方案 前言 最近工作中发现同事写代码遗留了一个bug,在使用Collectors.toMap的时候会出现Exception in thread "main&qu ...

  10. MySQL ALTER TABLE报错Duplicate entry 'xxx' for key 'PRIMARY'解决方法

    在MySQL中执行加字段等操作时可能会报Duplicate entry 'xxx' for key 'PRIMARY'的错,例如: mysql> alter table test add aa ...

最新文章

  1. latex 中文_【小白向】LaTeX 中文入门
  2. 物体的三维识别与6D位姿估计:PPF系列论文介绍(一)
  3. 2018年度自动机器学习框架盘点
  4. 学python可以做什么产品-学完Python可以做什么?主要用途有哪些?
  5. 计算机组成原理——I/O设备(外部设备)、I/O接口
  6. 【数理知识】Riccati 黎卡提 system
  7. java is number_数据类型----Number
  8. 解惑(三)----- 深入理解Python中的self参数和__init__(self)方法--通过类比Java语言
  9. PHP开发绝对不能违背的安全铁则!
  10. consumer和partition的数量建议
  11. mysql innodb引擎--范围查询优化
  12. java签到_实战:如果让你用SpringBoot实现签到奖励的功能,你会怎么做?
  13. Python学习7 集合Set
  14. ipad鼠标圆圈变成箭头_下一代 macOS 或将支持 Mac「投屏」到 iPad
  15. XStream xml转java对象
  16. 2017计算机应用基础实践,计算机应用基础试题及答案
  17. k3导入账套_K3金蝶维护绝密(内部技术教程)
  18. 如何重命名mysql数据库_如何重命名MySQL数据库?
  19. 地产AR模拟看房软件开发
  20. 在线端口检查工具 Online IP TCP UDP port scan

热门文章

  1. SPSS应用程序无法启动,因为应用程序的并行配置不正确。请参阅应用程序事件日志,或使用命令行sxstrace.exe工具。
  2. 火车票软件哪个好用_买火车票的软件哪个最好
  3. 五子棋聊天java_java带聊天的五子棋 适合新手
  4. 清华大学超级计算机中心,中国科学技术大学超级计算中心
  5. linux/windows对应的软件
  6. 韦根w34是多少位_韦根协议格式
  7. 身份证号正则验证及提取性别出生年月出生时间
  8. c语言课程设计风扇,基于单片机C语言万历智能温控风扇设计报告proteus大赛汇编.doc...
  9. 走在身后的2021,迎面走来的2022
  10. mysql sql练习题_Mysql----sql语句练习题(一)