gpt4 book ai didi

java - 链表以一种数据类型显示数据

转载 作者:行者123 更新时间:2023-11-30 02:10:38 24 4
gpt4 key购买 nike

我正在尝试显示链接列表中的流派类型的流派列表。我做了:

public void outputGenre(){
booksAvilable = new LinkedList <Book>();
booksAvailable.add(new book("Enders Game",1999,new Genre ("SciFi"),3));
booksAvailable.add(new book("Star Trek",1974,new Genre ("SciFi"),4));
booksAvailable.add(new book("Game of Thrones",1991,new Genre ("Drama"),3));

System.out.println("We have following Genres");
for(Book books:booksAvilable()){
Genre genre = books.getGenre();
System.out.println(genre);
}
}

此代码输出科幻两次和戏剧一次。我想让它只显示一次科幻。我想过使用 counter 和 if/else 语句,但我迷失了。

最佳答案

因为您要求一个没有流的版本,尽管我无法想象为什么:

Set<Genre> seen = new HashSet<>();
for(Book books:booksAvailable() ){

Genre genre = books.getGenre();

if (!seen.contains(genre)) {
System.out.println(genre);
seen.add(genre);
}
}

在这种情况下,您需要维护您已经看过的流派的记录,并且仅在尚未看过时才显示它。

无需太多争论,流式变体更干净、更简洁。

仍然需要实现 equals 才能正确运行,并且因为我使用了 HashSet 也是一个 int hashCode(),它可以返回流派名称字符串的哈希码。

另一种形式是记录一组流派的名称,需要两次循环:

Set<String> genres = new HashSet<>();
for(Book books:booksAvailable() ){
Genre genre = books.getGenre();
genres.add(genre.getName());
}

for(String genre : genres) {
System.out.println(genre);
}

就我个人而言,我仍然会选择流解决方案。

关于java - 链表以一种数据类型显示数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200941/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com