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; }
关键说明
- 对象引用特性:ArrayList中存储的是
WADataModel对象的引用,遍历过程中修改model对象的属性,会直接改变原列表中对应对象的属性值,无需额外操作将修改后的对象放回列表。 - Lombok注解作用:
@Getter和@Setter自动为每个属性生成getXXX()和setXXX()方法,让你可以直接调用这些方法读写属性。 - 条件灵活调整:你可以根据实际业务需求修改判断条件(比如检查其他属性、多条件组合),以及属性更新的逻辑(从数据库查询结果取值、固定值、计算值等)。
内容的提问来源于stack exchange,提问作者lakshya saxena
相关产品推荐
相关产品推荐

