Java8 Duplicate key 异常解决

Java8 dubbo 调用 Collectors.toMap代码片发生的异常(IllegalStateException: Duplicate key) 事故现场代码 Map1 map = list.stream().collect( Collectors.toMap(item -> item.getAppId(), item -> item)); 然后,这段代码是被dubbo中的线程执行的,所以,当时只抛了一句话,并没有堆栈信息,后面的日志都没有打印。以至于线程无缘无故后面的都不执行了... 阅读详情
AI摘要

本文详细解析了在使用Java8将list转换为map时遇到的DuplicateKey异常问题,通过实例演示了异常产生的原因,并提供了两种解决方案:一是避免key重复,二是使用自定义合并策略处理重复key。

Java8 Duplicate key 异常解决

1.在我们使用Java8中提供的list 转换map方法时,可能回出现下面的问题:

java.lang.IllegalStateException: Duplicate key...

    产生这个问题的原因时我们参与转换的list中,作为key的属性有重复,没有办法确定使用哪个元素来作为
转换后map中的value,下面的例子可以复现这个场景:


    @Test
    public void duplicateKey(){
        List<String> list = new LinkedList<>();
        list.add("apple");
        list.add("banana");
        list.add("banana");
        list.add("pear");
        Map<String, String> map = list.stream().collect(Collectors.toMap(item -> item, item -> item));
        for (Map.Entry<String, String> entry : map.entrySet()) {
            System.out.println(entry.toString());
        }
    }

上面代码运行时,会产生这样的异常:


java.lang.IllegalStateException: Duplicate key banana

	at java.util.stream.Collectors.lambda$throwingMerger$0(Collectors.java:133)
	at java.util.HashMap.merge(HashMap.java:1253)
	at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
	at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
	at java.util.LinkedList$LLSpliterator.forEachRemaining(LinkedList.java:1235)
	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.lhc.dongpo.easy.MyTest.duplicateKey(MyTest.java:57)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	...

这个异常就是说,转换map的过程中,有两个key是banana的元素,不知道怎么取舍,因此产生异常。

2.解决。

    解决办法就是我们去提供这样一个策略。
查看他的源码:


    public static <T, K, U>
    Collector<T, ?, Map<K,U>> toMap(Function<? super T, ? extends K> keyMapper,
                                    Function<? super T, ? extends U> valueMapper) {
        return toMap(keyMapper, valueMapper, throwingMerger(), HashMap::new);
    }

    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);
    }

有这样两个方法,出错的地方我们是用的第一个方法,对于可能存在重复key的转换中,我们要使用第二个方法。


        Map<String, String> map = list.stream().
                collect(Collectors.
                        toMap(item -> item, item -> item, (item1, item2) -> item1));

我这里使用的是两个key 相同时,保留先存进去的那个元素。相比第一个方法,主要就是我们要去实现一个策略,来决定key相同时,元素如何保留。

ptrade从零开始学习量化交易第166期【ptrade量化策略研究参考--三个因子挖掘思路】 三个因子挖掘思路 阅读详情

相关推荐

VXLAN技术详解

VXLAN(虚拟可扩展局域网)是一种Overlay二层虚拟化技术,通过MAC-in-UDP封装在IP网络上构建大规模虚拟二层网络。核心组件包括VTEP(隧道端点)、24位VNI(支持1600万个虚拟网络)和VXLAN网关。相比VLAN,VXLAN具有超大规模扩展、跨三层互联、支持虚拟机无缝迁移等优势,适用于云数据中心多租户隔离、跨数据中心互联等场景。其基于IP路由的封装方式无需改造物理网络,为现代云网络提供了弹性、安全的虚拟化解决方案。

kjkdd的博客 594

关于Java8当中List转Map报错“Duplicate key”的原因以及解决办法

    其实Java8的lamdba表达式了解的不是很透彻,在工作中也只是使用最多的就是 for循环遍历、list转map、map转list、分组等功能。需要什么就从网上百度查找,然后按照样子在自己代码中修改下。其中的细节并没有留意过,就在今天我不小心就掉进了坑里。     悲剧发生在今天早上,领导过来问我为什么业务上的数据有的时候会丢失,并让我排查下原因。我起初还怀疑是不是公司另外一端的接口有问题,于是就去问了下有没有上线之类的操作。得到的结果是:没有!     那我就只能从自己的代码入手了,我开始本地启

MonkeyBrothers的博客 2万+

从零开始之stm32之CAN通信

CAN通信极简教程(小白友好版),从小白的视角了解并实现简单的STM32F103的CAN通信,直接上手。

qq_30993593的博客 1306

出现Duplicate key

出现Duplicate Key 解决

weixin_46455069的博客 1859

固定时间收敛的控制器设计(基础知识)

针对控制系统的有限时间收敛和固定时间收敛给出一些常用定理。

qq_40241332的博客 1万+

QComboBox设置最大显示数量多余的用滑动条,以及QComboBox::setMaxVisibleItems()不起作用的问题

QComoboBox是Qt封装的一个选择框的东西,但是我在使用过程中有一点感觉很不好,如图: 不论你往里面添加多少个它都会给你显示全部,甚至给你铺满全屏,后来看了官方文档发现有个setMaxVisibleItems()的方法,我欣喜若狂啊,终于特么的能解决了,但是,很遗憾,不知为啥,我设置上之后并没有起作用,依然会显示全部,后来搜了百度发现有个人是这样解决的 QComboBox *box = ne...

Aboveground的博客 4919

duplicate key错误怎么解决

‌使用SQL的ON DUPLICATE KEY UPDATE语句‌:在MySQL中,可以使用INSERT …‌重试机制‌:在插入数据时,如果遇到DuplicateKeyException,可以设计重试逻辑,等待一段时间后再次尝试插入。‌分布式锁‌:使用Redis等分布式锁来确保在同一时间内只有一个服务实例可以写入数据。‌使用乐观锁‌:在Java中,可以使用版本号或时间戳来处理并发更新的问题。‌事务处理的最佳实践‌:确保事务的隔离级别和锁的选择能够适应高并发场景。获取锁:在插入数据前,尝试获取锁。

qq_33718794的博客 2407

一个基于ZYNQ、AXI接口的PL端卷积加速器,可由PS端调用(附Github源码)

一个基于ZYNQ,AXI接口的PL端卷积加速器,可由PS端调用开发板型号:Zynq-7000 SoC XC7Z305 FPGA开发平台:Vivado 2019.1;Github源码链接:https://github.com/CY0807/ZYNQ_PL_CONV_ACC。

跳跳骑士的博客 1306

详细解决java中的Collectors.toMap引起的java.lang.IllegalStateException: Duplicate key xxx 的错误

详细解决java中的Collectors.toMap引起的java.lang.IllegalStateException: Duplicate key xxx 的错误,比如java.lang.IllegalStateException: Duplicate key 2、java.lang.IllegalStateException: Duplicate key 1。

念兮为美 5645

air780e stm32标准库发送英文短信,如何实现?(附相关源码,仅供参考)

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1239

ABAP 后台作业里的消息机制:把 MESSAGE 写对,避免作业莫名取消

SAP后台作业消息处理机制解析 本文深入剖析了SAP系统中后台作业的消息处理机制,揭示了前台与后台执行环境的关键差异。核心发现包括: 后台作业对消息的处理规则: 所有消息写入Job log而不显示 根据消息类型决定是否继续执行 W警告在列表处理阶段会被自动转为E错误 关键异常处理: 通过error_message可捕获E/A类型消息 A类型消息会触发隐式数据库回滚 未被捕获的E/A消息将导致作业中断 实用解决方案: 将业务提示改为S或I类型 使用DISPLAY LIKE保持前台体验 通过error_mess

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2216

MYSQL之DUPLICATE KEY

如果插入的数据违反了唯一约束,MySQL 将执行更新操作而不是抛出错误。如果唯一键冲突,就会执行更新操作,否则会插入新行。:如果插入的数据违反了唯一约束,MySQL 将忽略该错误,不会执行任何操作。这意味着如果唯一键冲突,MySQL 将跳过该行,不会执行插入或更新操作。当向表中插入数据时,如果插入的数据违反了唯一约束(比如唯一索引或主键约束),就会触发。这些选项可以帮助开发者在插入数据时处理唯一键冲突的情况,使得数据操作更加灵活和可靠。为了处理这种情况,MySQL 提供了。在 MySQL 中,

weixin_53390884的博客 2899

JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)

测试又报bug啦 接到测试小伙伴的问题,说是一个接口不返回数据了,好吧,虽然不是我写的接口任务落到头上也得解决,本地调试了一下,好家伙,直接抛了个异常出来,这又是哪位大哥喝醉了写的代码... Exception in thread "main" java.lang.IllegalStateException: Duplicate key at java.util.str...

Elinor2017的博客 727

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

java duplicate key_JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)...

测试又报bug啦接到测试小伙伴的问题,说是一个接口不返回数据了,好吧,虽然不是我写的接口任务落到头上也得解决,本地调试了一下,好家伙,直接抛了个异常出来,这又是哪位大哥喝醉了写的代码...Exception in thread "main" java.lang.IllegalStateException: Duplicate keyat java.util.stream.Collectors.la...

weixin_34449886的博客 529

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java8 stream数据流 Duplicate key 异常解决

对于业务流程中常使用myabtisPlus获取List对象集合,对于使用Java8中的steam流控制获取组成Map<String, Object>的数据时,出现键可能存在多个的时候可以使用如上属性进行处理。

xuwuzhixia的博客 562

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

解决jdk8 stream tomap方法报错:java.lang.IllegalStateException: Duplicate key异常解决(key重复)...

为什么80%的码农都做不了架构师?>>> ...

weixin_34037977的博客 2638

使用steam流转为map报错java.lang.IllegalStateException: Duplicate key解决

在实际应用开发中,会常把一个List的查询数据集合转为一个Map,那么在这里的 list.stream().collect()其实就是做了这么一件事情,它是java8的stream方式实现的它是以type为key,以entity对象为value构成Map。java.lang.IllegalStateException:Duplicatekey异常在将List转换为Map时出现,解决方法是使用toMap()的重载方法,如果已经存在则不再修改,直接使用上一个数据。

qq_499514925的博客 516

java8 stream多次map_解决jdk8 stream tomap方法报错:java.lang.IllegalStateException: Duplicate key异常解决(key重复)...

List userList = User.ME.loadList(users);if (CollectionUtils.isNotEmpty(userList)) {Map userMap = userList.stream().filter(Objects::nonNull).collect(Collectors.toMap(User::getId, u -> u);map.put("us...

weixin_36111561的博客 1168

【Exception】 Java Lambda List转换Map报错 触发异常 IllegalStateException: Duplicate key

在使用Java8 lambda 将List转换为Map时,遇到报错:IllegalStateException- Duplicate key .... 在使用lambda进行 list转换为map过程中,遇到 key重复的情况下,就会抛出异常 IllegalStateException- Duplicate key ... 1、在使用 lambda 进行list转换map时,要注意 可能会出现key重复的情况,日常开发中,

HaHa_Sir的博客 4219

java8 对象转map时重复key Duplicate key xxxx

我们在利用java8 Lambda 表达式将集合中对象的属性转成Map时就会出现Duplicate key xxxx , 说白了也就是key 重复了!案例如下: @Getter @Setter @AllArgsConstructor public class Student{ private String className; private String student...

luzhensmart的专栏 2884

IllegalStateException: Duplicate key

通过Java8的语法可将实体list转成 指定key的map,当key出现重复值的时候会报“IllegalStateException: Duplicate key” 的异常 解决方法: //b覆盖 allEmployees.stream() .collect(Collectors.toMap(CompanyEntity::getEmployeeId, Function.identity(), (a,b) -> b)) //保存a,不覆盖

SHUKAI618的博客 682

Java 中Duplicate key 异常

Java 中Duplicate key 异常

manhengwei 2261
上一篇: MySQL查询最大值、最小值所在行
下一篇: 源代码分析 spring.factories 的使用原理和实现自动装配
过河的小卒子
博客等级 码龄10年 39粉丝 112原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值