Java中如何同时遍历两个ArrayList中的对象?
Java中同时遍历两个ArrayList的实现方法
我是编程新手,若问题表述不当还请见谅。我想要在Java中同时遍历两个ArrayList,以下是我的现有代码及想要实现的代码(若可行)。在Tournament类中创建并存储Champion对象,我拥有两个ArrayList:championList(存储游戏中所有硬编码的Champion对象)和teamList(存储玩家队伍中的Champion对象)。我希望通过同时遍历这两个集合,检查指定名称的Champion对象是否存在,若不存在则返回指定的int值。
现有代码
public int retireChamp(String nme){ for(Champion temp: championList) { if(temp.getName().equals(nme)) // do something etc... } }
想要实现的代码(设想)
public int retireChamp(nme){ for(Champion temp: championList && teamList) { // do something... } }
首先你设想的for(Champion temp: championList && teamList)写法在Java中不合法,增强for循环只能遍历单个Iterable对象。下面给你几种符合需求的实现方式:
方法1:分别遍历两个集合,检查目标名称是否存在
如果需求是检查指定名称的Champion是否在任意一个集合中不存在,可以先分别验证两个集合,再根据结果返回对应值:
public int retireChamp(String nme) { boolean existsInChampions = false; boolean existsInTeam = false; // 遍历全英雄列表 for (Champion temp : championList) { if (temp.getName().equals(nme)) { existsInChampions = true; break; // 找到目标就停止遍历,提升效率 } } // 遍历队伍列表 for (Champion temp : teamList) { if (temp.getName().equals(nme)) { existsInTeam = true; break; } } // 示例逻辑:任意一个集合中不存在则返回-1,都存在返回0 if (!existsInChampions || !existsInTeam) { return -1; } return 0; }
方法2:合并两个集合后遍历
如果只是想一次性遍历两个集合的所有元素,可以先合并成临时集合再遍历:
public int retireChamp(String nme) { boolean exists = false; // 创建临时集合合并两个列表,不修改原集合 List<Champion> combinedList = new ArrayList<>(); combinedList.addAll(championList); combinedList.addAll(teamList); for (Champion temp : combinedList) { if (temp.getName().equals(nme)) { exists = true; break; } } // 不存在则返回指定值,示例为-1 return exists ? 0 : -1; }
方法3:使用Java 8+ Stream流简化代码
如果项目使用Java 8及以上版本,可以用Stream更简洁地实现检查逻辑:
import java.util.stream.Stream; public int retireChamp(String nme) { // 检查名称是否在两个集合中都存在 boolean existsInChampions = championList.stream() .anyMatch(champ -> champ.getName().equals(nme)); boolean existsInTeam = teamList.stream() .anyMatch(champ -> champ.getName().equals(nme)); return (existsInChampions && existsInTeam) ? 0 : -1; }
特殊场景:按索引同时遍历两个集合
如果需求是同时取出两个集合同位置的元素处理,需要先确保两个集合长度一致,再用普通for循环按索引访问:
public int retireChamp(String nme) { // 长度不一致时直接返回错误值,避免索引越界 if (championList.size() != teamList.size()) { return -2; } for (int i = 0; i < championList.size(); i++) { Champion champFromAll = championList.get(i); Champion champFromTeam = teamList.get(i); // 同时处理两个位置的元素 if (champFromAll.getName().equals(nme) || champFromTeam.getName().equals(nme)) { // do something } } return 0; }
内容的提问来源于stack exchange,提问作者aidan gaskin
相关产品推荐
相关产品推荐

