gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:17:47 33 4
gpt4 key购买 nike

我必须从 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/

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