下面是我拥有的图书清单,并通过LinkedList
存储。我可以使用它们的方法使用title
,year
,price
和{来获取genres
,getTitle()
,getYear()
和getPrice()
{1}}。
我在检索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
我希望你能理解你们。
谢谢。
答案 0 :(得分:1)
对于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>
接口:
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;
}
}
答案 1 :(得分:1)
我正在向您更清楚地编写米哈尔代码。
public static void main(String[] args) {
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"));
getGenres(books);
}
private static void getGenres(LinkedList<Book> booksList) {
List<String> collect = booksList.stream().map(x -> x.getGenres()).distinct().collect(Collectors.toList());
collect.stream().forEach(System.out::println);
}
答案 2 :(得分:0)
这可能会使解决方案变得过于复杂,但是一种方法可以是将值添加到集合中以确保它包含不同的流派,然后再打印集合的内容。
像这样修改getGenre()方法
private void getGenres(){
Set<String> genreSet = new HashSet<>();
for (Genre genre : booksList){
genreSet.add(genre.toString());
}
System.out.println(Arrays.asList(genreSet.toArray()));
}