java8 list 转化成map,java.lang.IllegalStateException异常产生的原因

使用Java8 的lambda将list集合转化成map,然后出现异常

org.springframework.jdbc.datasource.DataSourceUtils]-Returning JDBC Connection to DataSource
[org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver]-Resolving exception from handler [public java.util.Map<java.lang.String, java.lang.Object> com.mxys.generate.sp.controller.DoTablesController.showTableById(javax.servlet.http.HttpServletRequest,java.lang.Long)]: java.lang.IllegalStateException: Duplicate key com.mxys.generate.sp.model.TemplateTableRow@65fe4741
[org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver]-Resolving exception from handler [public java.util.Map<java.lang.String, java.lang.Object> com.mxys.generate.sp.controller.DoTablesController.showTableById(javax.servlet.http.HttpServletRequest,java.lang.Long)]: java.lang.IllegalStateException: Duplicate key com.mxys.generate.sp.model.TemplateTableRow@65fe4741
[org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver]-Resolving exception from handler [public java.util.Map<java.lang.String, java.lang.Object> com.mxys.generate.sp.controller.DoTablesController.showTableById(javax.servlet.http.HttpServletRequest,java.lang.Long)]: java.lang.IllegalStateException: Duplicate key com.mxys.generate.sp.model.TemplateTableRow@65fe4741
[org.springframework.web.servlet.DispatcherServlet]-Could not complete request

这里写图片描述

根据服务器报的错误是将list转化成map集合的时候,出现了非法状态异常,排查代码,

 Map<String, TemplateTableRow> tempChild = row.getChild().stream().collect(Collectors.toMap(TemplateTableRow::getRowValue, Function.identity());

发现有一个问题,没有排除重复的值,在map中,我的代码的rowvalue 是可以重复的,但是我没有排除,所以map中会有key重复,也就是string的值会重复,要使用Java8 的函数的特性,控制一下生成的时候,如果有重复值的取值方法,我的改进如下:

这里写图片描述
也就是有重复值的时候,我取先进来的值,也就是old。

总结一下:java.lang.IllegalStateException异常,产生的原因可能就是数据结构的原因,数据结构没有正确处理,在错误log中,`Duplicate key` 复制主键出错,就明确了错误的地方。   

**引以为戒,在使用Java8转化为map的时候,要考虑字段是否是唯一的**
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值