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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 20:20:36