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
相关产品推荐
相关产品推荐

