如何使用三个String列表填充自定义ActorData类型的ArrayList
问题原因
- 你写了三个独立的遍历循环,每次循环都会新建一个
ActorData对象,仅给这个对象赋值一个属性后就添加到列表里,最终得到的列表长度是三个输入列表的长度之和,每个对象自然只有一个属性有值,其余都是null - 原有代码中重复声明了两次
actors变量,属于冗余代码需要删除
修正后的实现代码
你只需要把原来的三个for循环替换成下面的单次循环即可:
List<ActorData> actors = new ArrayList<>(); // 先做长度校验避免下标越界,你也可以根据业务逻辑调整异常处理逻辑 if (actornames.size() != actorcharacters.size() || actornames.size() != actorphotoFILEpaths.size()) { // 这里可以加异常抛出或者日志打印,处理三个列表长度不一致的异常情况 throw new RuntimeException("演员相关属性列表长度不一致"); } // 单次循环按同一下标赋值三个属性到同一个对象 for (int i = 0; i < actornames.size(); i++) { ActorData actorData = new ActorData(); // 赋值姓名 actorData.setName(actornames.get(i)); // 赋值角色 actorData.setCharacter(actorcharacters.get(i)); // 赋值照片路径 String filepath = baseFILEpath + actorphotoFILEpaths.get(i).replaceAll("/", ""); actorData.setPhotoFILEpath(filepath); // 赋值完成再添加到列表 actors.add(actorData); }
说明
如果业务场景中允许三个列表长度不一致,可以把循环条件改成i < Math.min(Math.min(actornames.size(), actorcharacters.size()), actorphotoFILEpaths.size()),取三个列表的最小长度作为遍历上限,避免数组下标越界问题。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

