使用 Stream 流 toMap 的NPE、
一、Stream 流在使用toMap时跑出的NPE
final Map<String, SuperviseOrganization> superviseOrganizationMap = superviseOrganizations.stream().collect(Collectors.toMap(SuperviseOrganization::getAgencyName, SuperviseOrganization::getAgencyCode, (k1, k2) -> k1));
原因是在底层使用了Map下的merge方法,如果 map中的 Value 值为空就会报错
default V merge(K key, V value,
BiFunction<? super V, ? super V, ? extends V> remappingFunction) {
Objects.requireNonNull(remappingFunction);
Objects.requireNonNull(value);
V oldValue = get(key);
V newValue = (oldValue == null) ? value :
remappingFunction.apply(oldValue, value);
if(newValue == null) {
remove(key);
} else {
put(key, newValue);
}
return newValue;
}
可以使用Optional.ofNullable保证value值不为null
Map<String, String> riskMap = riskStatus.stream().distinct().collect(Collectors.toMap(SimpleIdAndStatus::getId, s-> Optional.ofNullable(s.getStatus()).orElse(""), (m, n) -> n));
二、使用import org.apache.commons.beanutils.BeanUtils; 包下的populate 将Map转换为JavaBean的对象时引发的异常
BeanUtils.populate(bean,map);
如果对应的map中存在不可转换的类型会报错,例如我map中有个字段 cost :'null' 此时,null 为字符串
我要将cost转换为javaBean 中对应BigDecimal类型的cost字段,此时就会在转换时报错。
三、在使用JPA和HIbernate时,不能直接在模型对象上修改,由于自带的机制,会将数据库查询出的模型写入数据库。
分类:
工作 / 工作问题小记(摘要)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 一文读懂知识蒸馏
· 终于写完轮子一部分:tcp代理 了,记录一下