java - 如何从列表中获取不同的元素?

标签 java linked-list

以下是我拥有的图书 list ,并通过 LinkedList 存储。我可以得到 title , year , pricegenres通过他们的方法使用 getTitle() , getYear() , getPrice()getGenres()

我在检索 titles 方面没有任何问题, yearsprice但是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

Help from you guys.

希望大家能够理解。

提前致谢。

最佳答案

对于 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/

相关文章:

java - Robolectric 和外部 jar

java - 将按钮绑定(bind)到多个属性不起作用

java - 如何将外部文件夹链接到我的 tomcat 8 应用程序

python - 链表和数组

c - 在链表中插入字符串时出现问题

c++ - 链接列表数组(使用散列)

java - 如何在 LinkedList 中搜索特定单词并返回它在列表中的位置以及出现的次数

java - 尝试用java制作一个文本编辑器

java - 采取什么方法使我的代码更通用 Java/Spring?

c++ - 反向链表的一部分