You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中遍历Model列表并更新指定元素属性的实现方案

问题:更新ArrayList中WADataModel的属性

我有一个存储WADataModel类的ArrayList,该类包含多个String类型变量,列表数据由JDBC Template结果集填充。现在需要遍历这个ArrayList,根据特定条件更新部分Model元素的属性——比如检查PLAN_NUMBER是否为空,据此更新SUBGROUP_POLICY_NUMBER、GROUP_POLICY_NUMBER等属性。我已经能实现列表遍历,但不清楚如何更新列表中的Model属性,恳请协助完成claimDataList的属性更新。

我的Model类

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class WADataModel {
    public String STATUS;   
    public String AUTO_DATE;
    public String RECORD_TYPE;
    public String VENDOR_NAME;
    public String CREATED_DATE;
    public String ACTION_CODE;
    public String CITY;
    public String GROUP_NUMBER;
    public String GROUP_POLICY_NUMBER;
    public String SUBGROUP_NUMBER;
    public String SUBGROUP_POLICY_NUMBER;
    public String SYSTEM;
    public String PLAN_NUMBER;
}

我的DAO类

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.jdbc.core.BeanPropertyRowMapper;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
import org.springframework.stereotype.Component;

@Component
public class PlanCrosswalks {

    @Autowired
    @Qualifier("nemisNamedJdbcTemplate")
    private NamedParameterJdbcTemplate nemisJdbcTemplate;   

    @Autowired
    private FetchDatafFromProp fetchDatafFromProp;

    @Value("${query.state}")
    private String queryState;

    public List<WADataModel> doWACrosswalk(List<WADataModel> claimDataList) throws ApplicationExceptions{
        
        RowMapper<WACrosswalkModel> rowMapper = new BeanPropertyRowMapper<>(WACrosswalkModel.class);
        List<WACrosswalkModel> statusResult = new ArrayList<>();
        Map<String,String> crosswalkQueryMap = new HashMap<>();
        Map<String,String> paramMap = new HashMap<>();
        crosswalkQueryMap = fetchDatafFromProp.getDataForGeneration();
        
        statusResult = nemisJdbcTemplate.query(crosswalkQueryMap.get(queryState+ Constants.UNDERSCORE + Constants.FETCH_SUB_GROUP_POLICY),paramMap,rowMapper);
        
        for(WADataModel model : claimDataList)
            //Here I want to update ClaimDataList elements like SUBGROUP_POLICY_NUMBER,GROUP_POLICY_NUMBER based upon some conditions by iterating whole List.

        return claimDataList; 
    }
}

解决方案

因为你的WADataModel已经通过Lombok的@Getter和@Setter注解自动生成了属性的读写方法,所以在遍历列表时,直接调用对象的setXXX方法即可修改属性值(ArrayList存储的是对象引用,修改遍历到的对象属性会直接同步到原列表中)。以下是结合你需求的示例实现:

public List<WADataModel> doWACrosswalk(List<WADataModel> claimDataList) throws ApplicationExceptions{
    
    // 原有的查询代码保持不变
    RowMapper<WACrosswalkModel> rowMapper = new BeanPropertyRowMapper<>(WACrosswalkModel.class);
    List<WACrosswalkModel> statusResult = new ArrayList<>();
    Map<String,String> crosswalkQueryMap = new HashMap<>();
    Map<String,String> paramMap = new HashMap<>();
    crosswalkQueryMap = fetchDatafFromProp.getDataForGeneration();
    
    statusResult = nemisJdbcTemplate.query(crosswalkQueryMap.get(queryState+ Constants.UNDERSCORE + Constants.FETCH_SUB_GROUP_POLICY),paramMap,rowMapper);
    
    // 遍历并更新属性
    for(WADataModel model : claimDataList) {
        // 示例条件:检查PLAN_NUMBER是否为空或空白字符串
        if (model.getPLAN_NUMBER() == null || model.getPLAN_NUMBER().trim().isEmpty()) {
            // 从statusResult中匹配对应数据(假设WACrosswalkModel有匹配字段,比如GROUP_NUMBER)
            for(WACrosswalkModel crosswalk : statusResult) {
                if (model.getGROUP_NUMBER().equals(crosswalk.getGROUP_NUMBER())) {
                    // 更新目标属性
                    model.setSUBGROUP_POLICY_NUMBER(crosswalk.getSUBGROUP_POLICY_NUMBER());
                    model.setGROUP_POLICY_NUMBER(crosswalk.getGROUP_POLICY_NUMBER());
                    break; // 找到匹配项后终止内层循环,提升效率
                }
            }
            // 如果不需要从statusResult取数,也可以直接设置固定值
            // model.setSUBGROUP_POLICY_NUMBER("默认子组保单号");
            // model.setGROUP_POLICY_NUMBER("默认组保单号");
        }
        
        // 可添加更多条件判断,比如其他属性的校验与更新
        // if (其他条件) {
        //     model.setXXX(新值);
        // }
    }

    return claimDataList; 
}

关键说明

  1. 对象引用特性:ArrayList中存储的是WADataModel对象的引用,遍历过程中修改model对象的属性,会直接改变原列表中对应对象的属性值,无需额外操作将修改后的对象放回列表。
  2. Lombok注解作用:@Getter和@Setter自动为每个属性生成getXXX()和setXXX()方法,让你可以直接调用这些方法读写属性。
  3. 条件灵活调整:你可以根据实际业务需求修改判断条件(比如检查其他属性、多条件组合),以及属性更新的逻辑(从数据库查询结果取值、固定值、计算值等)。

内容的提问来源于stack exchange,提问作者lakshya saxena

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:25:41