登录
首页 >  文章 >  java教程

以下是一些优化从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 316浏览 收藏

本文介绍五种优化从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学习网公众号吧!

相关阅读
更多>
最新阅读
更多>
课程推荐
更多>