以下是我拥有的图书 list ,并通过 LinkedList
存储。我可以得到 title
, year
, price
和genres
通过他们的方法使用 getTitle()
, getYear()
, getPrice()
和getGenres()
。
我在检索 titles
方面没有任何问题, years
和price
但是genres
我得到的应该是不同的,即在我的书单中 Programming
, Programming
, Programming
, Drama
, Thriller
。
当我使用下面的函数时,我确实得到了我应该得到的所有类型 Programming
仅一次。
LinkedList<Book> books = new LinkedList<Book>();
books.add(new Book("Java",2000,"Programming", "$20"));
books.add(new Book("Swift",2001,"Programming", "$30"));
books.add(new Book("C#",1990,"Programming", "$40"));
books.add(new Book("The Alchemist",2010,"Drama", "$10"));
books.add(new Book("Goosebumps",2010,"Thriller", "$5"));
private void getGenres(){
for (Genre genre : booksList){
System.out.println(genre.toString());
}
}
我得到的输出为:
Programming
Programming
Programming
Drama
Thriller
但是我应该得到的输出是:
Programming
Drama
Thriller
希望大家能够理解。
提前致谢。
最佳答案
对于 java 8 及更高版本,您可以使用流来过滤书籍中的流派,然后获取不同的值:
LinkedList<Book> books = ...;
private void getGenres(){
List<Genre> genres = books.stream()
.map(x -> x.getGenre())
.distinct()
.collect(Collectors.toList());
for (Genre genre : genres){
System.out.println(genre);
}
}
您的类型 Genre
需要实现Comparable<T>
接口(interface):
public class Genre implements Comparable<Genre>{
String name;
public Genre(String name) {
super();
this.name = name;
}
@Override
public int compareTo(Genre otherGenre) {
return name.compareTo(otherGenre.name);
}
@Override
public String toString() {
return name;
}
}
关于java - 如何从列表中获取不同的元素?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55781568/