java - 通过枚举值从 ArrayList 中删除特定元素

标签 java

我必须从 ArrayList 中删除元素,但我无法使其工作。我必须收集每种类型最古老的书名。

List<BookItem> list = new ArrayList<>();
list.add(new BookItem("TitleName1", 1950, "NOVEL"));
list.add(new BookItem("TitleName2", 1970, "HORROR"));
list.add(new BookItem("TitleName3", 1954, "NOVEL"));
list.add(new BookItem("TitleName4", 1989, "HORROR"));
list.add(new BookItem("TitleName5", 1990, "HUMOR"));
list.add(new BookItem("TitleName6", 1995, "HUMOR"));

例如,在上述情况下,所需的结果将是“TitleName1,TitleName2,TitleName5”。

我尝试了以下代码来实现此目的,但没有收到所需的结果。 BookGenre 是枚举类型。

public List<BookItem> getOldestBookPerGenre(List<BookItem> bookItems){
    List<BookItem> genreList = new ArrayList<>();
    List<BookItem> returnList = new ArrayList<>();
    for(int i=0; i < BookGenre.values().length; i++){
        for(BookItem item: bookItems) {
            if (item.getBookGenre().ordinal() == i) {
                genreList.add(item);
            }
        }
        if (genreList.size() > 0) {
            genreList.sort(compareByYear);
            returnList.add(genreList.get(0));
        }
        genreList.clear();
    }
    return returnList;
}

最佳答案

使用java流很容易,但是正如你所说,你不能在这里使用Java8,你有另一个解决方案:

public List<BookItem> getOldestBookPerGenre(List<BookItem> bookItems) {
    Map<String, BookItem> oldestBookByGenre = new HashMap<>();

    for (BookItem bookItem : bookItems) {
        oldestBookByGenre.putIfAbsent(bookItem.getGenre(), bookItem);
        if (Integer.parseInt(bookItem.getYear()) < Integer.parseInt(oldestBookByGenre.get(bookItem.getGenre()).getYear())) {
            oldestBookByGenre.put(bookItem.getGenre(), bookItem);
        }
    }

    return new ArrayList<>(oldestBookByGenre.values());
}

输出列表,给定问题输入:

BookItem{title='TitleName2', year='1970', novel='HORROR'}
BookItem{title='TitleName1', year='1950', novel='NOVEL'}
BookItem{title='TitleName5', year='1990', novel='HUMOR'}

关于java - 通过枚举值从 ArrayList 中删除特定元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58860370/

相关文章:

java - 读取jar文件中的目录

java - 如何将 Java Web 应用程序部署到 Heroku?

Java - 不能接受便士的自动售货机

java - 如何正确编码以下 URL

java - BrightScript Eclipse 插件在 OSX 上安装后不显示

java - 如何重用方法?

java - XSLT 在 Saxon 中生成带有未声明的 namespace 前缀的输出。错误 XTSE1430 : Namespace prefix exsl is undeclared

Java 数据包困惑

java - 是否可以在 JSF 1.2 中使用 JSF 2.0 提供的 bean 级别验证

java - 对于这种情况,如何在 hibernate 中定义唯一约束?