Java8 Stream生成Account列表异常:未正确填充主属性问题
解决Account对象列表主属性缺失问题
核心修复思路
遍历linkedDetails集合时,每个生成的Account对象不仅要绑定当前linkedDetail的专属属性,还要从accountRequest中同步复制accountId、custId、custName、comments、status这些主属性,确保每个Account实例的属性完整。
示例代码(Java场景)
假设使用普通POJO处理,先定义Account类结构:
public class Account { // 主属性 private String accountId; private String custId; private String custName; private String comments; private String status; // linkedDetails专属属性 private String custCode; private LocalDate startOn; private String loanType; // 生成getter、setter方法,或使用Lombok的@Data简化 }
然后编写转换逻辑:
import java.util.ArrayList; import java.util.List; public class AccountConverter { public List<Account> convertToAccountList(AccountRequest accountRequest) { List<Account> accountList = new ArrayList<>(); if (accountRequest == null || accountRequest.getLinkedDetails() == null) { return accountList; } // 提前提取主属性,避免循环中重复调用getter String accountId = accountRequest.getAccountId(); String custId = accountRequest.getCustId(); String custName = accountRequest.getCustName(); String comments = accountRequest.getComments(); String status = accountRequest.getStatus(); // 遍历每个linkedDetail生成完整Account对象 for (LinkedDetail detail : accountRequest.getLinkedDetails()) { Account account = new Account(); // 填充主属性 account.setAccountId(accountId); account.setCustId(custId); account.setCustName(custName); account.setComments(comments); account.setStatus(status); // 填充linkedDetail专属属性 account.setCustCode(detail.getCustCode()); account.setStartOn(detail.getStartOn()); account.setLoanType(detail.getLoanType()); accountList.add(account); } return accountList; } }
额外优化建议
- 如果使用Lombok的
@Builder注解,可简化对象初始化代码,避免大量setter调用 - 注意
startOn这类日期属性的JSON反序列化适配,可通过Jackson的@JsonFormat(pattern = "yyyy-MM-dd")注解确保格式正确 - 添加空值校验,避免因
accountRequest或linkedDetails为空导致空指针异常
内容的提问来源于stack exchange,提问作者user8401182
相关产品推荐
相关产品推荐

