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

Java求助:已实现Map遍历,如何遍历其中Actor对象集合获取信息

解决Map<String, Set>的嵌套遍历问题

别担心哈,Java新手遇到这种嵌套集合遍历的问题太正常啦!我来给你捋清楚怎么搞定这个需求~

首先咱们得先明确一下Actor类的基础情况,为了能清晰输出演员信息,最好给它重写toString()方法,或者确保你能通过getter方法拿到每个属性(比如姓名、年龄这些)。举个Actor类的示例:

class Actor {
    private String name;
    private int age;

    // 构造方法
    public Actor(String name, int age) {
        this.name = name;
        this.age = age;
    }

    // Getter方法(如果需要单独输出属性的话)
    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    // 重写toString,方便直接打印演员信息
    @Override
    public String toString() {
        return String.format("姓名:%s,年龄:%d", name, age);
    }
}

接下来就是核心的遍历部分啦,这里给你两种常用的实现方式:

方式1:Java 8+的Lambda forEach(简洁高效)

这种方式代码更简洁,适合Java 8及以上版本:

import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

public class MovieActorDemo {
    public static void main(String[] args) {
        // 先初始化测试数据
        Map<String, Set<Actor>> movieActorsMap = new HashMap<>();
        
        Set<Actor> avengersActors = new HashSet<>();
        avengersActors.add(new Actor("小罗伯特·唐尼", 58));
        avengersActors.add(new Actor("克里斯·埃文斯", 42));
        movieActorsMap.put("复仇者联盟", avengersActors);
        
        Set<Actor> titanicActors = new HashSet<>();
        titanicActors.add(new Actor("莱昂纳多·迪卡普里奥", 49));
        titanicActors.add(new Actor("凯特·温斯莱特", 48));
        movieActorsMap.put("泰坦尼克号", titanicActors);

        // 遍历Map,同时遍历每个影片对应的Actor集合
        movieActorsMap.forEach((movieName, actors) -> {
            System.out.println("📽️ 影片名称:" + movieName);
            System.out.println("🎭 参演演员:");
            // 遍历Set中的Actor对象
            actors.forEach(actor -> {
                // 方式A:直接用toString输出(推荐,代码简洁)
                System.out.println("  - " + actor);
                // 方式B:如果需要自定义格式,调用getter方法输出单个属性
                // System.out.println("  - 姓名:" + actor.getName() + ",年龄:" + actor.getAge());
            });
            System.out.println("----------------------------------------");
        });
    }
}

方式2:传统增强for循环(兼容性好,适合所有Java版本)

如果你还在使用Java 8以下的版本,或者更习惯传统的循环写法,可以用这种方式:

// 遍历Map的entry集合
for (Map.Entry<String, Set<Actor>> entry : movieActorsMap.entrySet()) {
    String movieName = entry.getKey();
    Set<Actor> actors = entry.getValue();
    
    System.out.println("📽️ 影片名称:" + movieName);
    System.out.println("🎭 参演演员:");
    // 遍历Set中的Actor对象
    for (Actor actor : actors) {
        System.out.println("  - " + actor);
        // 同样可以用getter自定义输出格式
    }
    System.out.println("----------------------------------------");
}

核心要点总结

  • 先遍历Map的每个键值对(Entry),拿到影片名称(key)和对应的演员集合(value)
  • 对拿到的Set<Actor>再进行一次遍历,逐个处理每个Actor对象
  • 如果想输出清晰的演员信息,要么给Actor类重写toString(),要么通过getter方法单独获取每个属性进行格式化输出

内容的提问来源于stack exchange,提问作者Stiltinho

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:48:58