请求修改图书流派打印代码:仅输出一个SciFi类流派
没问题,我来帮你实现「只打印不重复的图书流派,SciFi类仅输出一个」的需求!先把你的代码片段整理清楚,再给你两种可行的实现方案:
首先是你的基础代码(我帮你补全了语法细节):
public class Catalogue { private List<Movie> moviesAvailable; private List<Movie> moviesRented; private List<Genre> genres; public Catalogue() { moviesAvailable = new LinkedList<Movie>(); moviesRented = new LinkedList<Movie>(); genres = new LinkedList<Genre>(...); // 这里是你初始化流派列表的代码 } }
方案1:直接对已有流派列表去重打印
如果你的genres列表里已经包含所有流派,但存在重复条目(比如多个SciFi),用HashSet自动去重是最方便的——因为Set天然不允许重复元素。
添加这个方法到Catalogue类里:
public void printUniqueGenres() { // 把流派列表转成Set自动去重 Set<Genre> uniqueGenres = new HashSet<>(genres); // 遍历打印每个去重后的流派 for (Genre genre : uniqueGenres) { System.out.println(genre.getName()); // 假设Genre类有getName()方法获取流派名称 } }
方案2:从所有电影中提取并去重流派
如果流派是关联在电影对象上的,需要从「可用电影」和「已租电影」里统一提取流派再去重:
添加这个方法即可:
public void printUniqueGenresFromMovies() { Set<Genre> uniqueGenres = new HashSet<>(); // 加入可用电影的所有流派 for (Movie movie : moviesAvailable) { uniqueGenres.add(movie.getGenre()); // 假设Movie类有getGenre()方法 } // 加入已租电影的所有流派 for (Movie movie : moviesRented) { uniqueGenres.add(movie.getGenre()); } // 打印最终去重后的流派 for (Genre genre : uniqueGenres) { System.out.println(genre.getName()); } }
⚠️ 注意:要让HashSet正确识别重复的流派,你的Genre类必须重写equals()和hashCode()方法,否则会把不同对象实例的SciFi当成不同流派。给你补一下Genre类的关键代码:
public class Genre { private String name; // 构造函数、getName()、setName()... @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Genre genre = (Genre) o; return Objects.equals(name, genre.name); } @Override public int hashCode() { return Objects.hash(name); } }
这样无论多少个SciFi流派实例,只要名称相同,就只会被保留一个啦!
内容的提问来源于stack exchange,提问作者Pramish Luitel
相关产品推荐
相关产品推荐

