当前位置:首页 > 文章列表 > 文章 > java教程 > 以下是一些优化从Map获取值并赋值给对象的代码的方法:1.**使用Java8的StreamAPI**:利用StreamAPI简化代码,如`Map.forEach`或`entrySet().stream()`。```javaMapmap=...;YourObjectobj=newYourObject();map.forEach((key,value)->{switch(key){case"field

以下是一些优化从Map获取值并赋值给对象的代码的方法:1.**使用Java8的StreamAPI**:利用StreamAPI简化代码,如`Map.forEach`或`entrySet().stream()`。```javaMapmap=...;YourObjectobj=newYourObject();map.forEach((key,value)->{switch(key){case"field

2025-03-17 13:18:32 0浏览 收藏

本文介绍五种优化从Map获取值并赋值给对象的Java代码方法,以解决冗余代码和可维护性问题。主要方法包括:使用Java 8 Stream API简化遍历和赋值;利用反射机制动态设置值,适用于字段较多的情况;采用Builder模式在构建对象时直接赋值;借助第三方库如Apache Commons BeanUtils简化转换;以及使用Optional处理潜在的null值。 文中并以实际案例,对比了使用Spring MVC特性直接将请求体映射到对象,与传统从Map中逐个赋值的代码效率差异,最终推荐了更简洁高效的Spring MVC方案。 通过这些方法,可以显著提升代码可读性和可维护性。

如何优化从Map获取值并赋值给对象的代码?

提升代码效率:优化Map值到对象属性的赋值

本文将演示如何优化一段将Map请求参数赋值给对象的代码,该代码存在冗余的从Map中获取值并逐个赋值给对象属性的问题。原始代码如下:

@RequestMapping(value = "/v1/update/tmPara", method={ RequestMethod.POST })
public ResponseResult updateTmParaV1 (
        HttpServletRequest request,
        @RequestBody Map tmDdDicSetMap
) {
    // ... 省略部分代码 ...

    TmPara tmPara = new TmPara();

    tmPara.setParId(String.valueOf(tmDdDicSetMap.get("parId")));
    tmPara.setParNam(String.valueOf(tmDdDicSetMap.get("parNam")));
    tmPara.setParVal(String.valueOf(tmDdDicSetMap.get("parVal")));
    tmPara.setRemark(String.valueOf(tmDdDicSetMap.get("remark")));
    tmPara.setRecStaDat(String.valueOf(tmDdDicSetMap.get("recStaDat")));
    tmPara.setRecStpFlg(String.valueOf(tmDdDicSetMap.get("recStpFlg")));
    tmPara.setRecStpDat(String.valueOf(tmDdDicSetMap.get("recStpDat")));
    tmPara.setRecSta(String.valueOf(tmDdDicSetMap.get("recSta")));
    tmPara.setBusSta(String.valueOf(tmDdDicSetMap.get("busSta")));

    // ... 省略部分代码 ...
}

这段代码重复使用String.valueOf(tmDdDicSetMap.get(...)),显得冗长且难以维护。

利用Spring MVC特性优化代码

为了简化代码,我们可以直接利用Spring MVC特性,避免使用Map接收请求参数。 我们可以直接将请求体映射到TmPara对象上。

优化后的代码:

只需将@RequestBody Map tmDdDicSetMap替换为@RequestBody TmPara tmPara。如果请求体字段名与TmPara属性名不一致,可以使用@JsonProperty注解进行映射。

例如,如果请求体字段名为par_id,而TmPara属性名为parId,则需在TmPara类中添加注解:

public class TmPara {
    @JsonProperty("par_id")
    private String parId;
    // ... 其他属性 ...
}

通过此优化,Spring MVC会自动将请求体数据映射到TmPara对象,避免了手动从Map中获取值并赋值的冗余步骤,使代码更简洁、易读且不易出错。

@RequestMapping(value = "/v1/update/tmPara", method={ RequestMethod.POST })
public ResponseResult updateTmParaV1 (
        HttpServletRequest request,
        @RequestBody TmPara tmPara
) {
    // ... 省略部分代码 ...
    int tmParaUpdateFlag = tmParaService.updateTmParaV1(tmPara);
    // ... 省略部分代码 ...
}

理论要掌握,实操不能落!以上关于《以下是一些优化从Map获取值并赋值给对象的代码的方法:1.**使用Java8的StreamAPI**:利用StreamAPI简化代码,如`Map.forEach`或`entrySet().stream()`。```javaMapmap=...;YourObjectobj=newYourObject();map.forEach((key,value)->{switch(key){case"field1":obj.setField1(value);break;case"field2":obj.setField2(value);break;//其他字段...}});```2.**反射机制**:如果Map的键与对象的字段名一致,使用反射动态设置值,适用于字段多的情况,但需注意性能。```javaMapmap=...;YourObjectobj=newYourObject();for(Map.Entryentry:map.entrySet()){try{Fieldfield=YourObject.class.getDeclaredField(entry.getKey());field.setAccessible(true);field.set(obj,entry.getValue());}catch(NoSuchFieldException|IllegalAccessExceptione){//处理异常}}```3.**使用Builder模式**:在构建对象时直接从Map中获取值。```javaMapmap=...;YourObjectobj=YourObject.builder().field1(map.get("field1")).field2(map.get("field2"))//其他字段....build();```4.**使用第三方库**:如ApacheCommonsBeanUtils简化转换。```javaMapmap=...;YourObjectobj=newYourObject();BeanUtils.populate(obj,map);```5.**减少null检查**:使用`Optional`处理null值,避免频繁的null检查。```javaMapmap=...;YourObjectobj=newYourObject();Optional.ofNullable(map.get("field1")).ifPresent(obj::setField1);Optional.ofNullable(map.get("field2")).ifPresent(obj::setField2);//其他字段...```通过这些方法,可以有效优化从Map获取值并赋值给对象的代码,提高代码的可读性和可维护性。选择方法应根据具体需求和环境。》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

Gomod模块依赖管理:名称路径关联与持久化Gomod模块依赖管理:名称路径关联与持久化
上一篇
Gomod模块依赖管理:名称路径关联与持久化
ChromeDevTools中如何修改并重放请求Cookies?
下一篇
ChromeDevTools中如何修改并重放请求Cookies?
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    542次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    508次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    497次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    484次学习
查看更多
AI推荐
  • 笔灵AI生成答辩PPT:高效制作学术与职场PPT的利器
    笔灵AI生成答辩PPT
    探索笔灵AI生成答辩PPT的强大功能,快速制作高质量答辩PPT。精准内容提取、多样模板匹配、数据可视化、配套自述稿生成,让您的学术和职场展示更加专业与高效。
    24次使用
  • 知网AIGC检测服务系统:精准识别学术文本中的AI生成内容
    知网AIGC检测服务系统
    知网AIGC检测服务系统,专注于检测学术文本中的疑似AI生成内容。依托知网海量高质量文献资源,结合先进的“知识增强AIGC检测技术”,系统能够从语言模式和语义逻辑两方面精准识别AI生成内容,适用于学术研究、教育和企业领域,确保文本的真实性和原创性。
    41次使用
  • AIGC检测服务:AIbiye助力确保论文原创性
    AIGC检测-Aibiye
    AIbiye官网推出的AIGC检测服务,专注于检测ChatGPT、Gemini、Claude等AIGC工具生成的文本,帮助用户确保论文的原创性和学术规范。支持txt和doc(x)格式,检测范围为论文正文,提供高准确性和便捷的用户体验。
    38次使用
  • 易笔AI论文平台:快速生成高质量学术论文的利器
    易笔AI论文
    易笔AI论文平台提供自动写作、格式校对、查重检测等功能,支持多种学术领域的论文生成。价格优惠,界面友好,操作简便,适用于学术研究者、学生及论文辅导机构。
    50次使用
  • 笔启AI论文写作平台:多类型论文生成与多语言支持
    笔启AI论文写作平台
    笔启AI论文写作平台提供多类型论文生成服务,支持多语言写作,满足学术研究者、学生和职场人士的需求。平台采用AI 4.0版本,确保论文质量和原创性,并提供查重保障和隐私保护。
    41次使用
微信登录更方便
  • 密码登录
  • 注册账号
登录即同意 用户协议隐私政策
返回登录
  • 重置密码