我有两个数组列表,用于存储名为Book的类的实例。我正在尝试获取两个列表中的书/书。
这是一项搜索功能,可让您通过输入图书的ISBN,名称和作者来搜索图书。列表'结果A'包含输入的ISBN和名称的书籍,而另一个列表'结果B'包含输入作者撰写的书籍。为了获得最终结果,我需要获得两个数组中的书。
我尝试过使用retainAll()函数,但我发现它并不适用于存储实例的列表。
List<Book> resultA = BookManager.getBooksWhere("book_ISBN", ISBN, "book_name", bookName);
List<Book> resultB = BookManager.getBooksByAuthors(authors);
resultB.retainAll(resultA);
searchResults = resultA;
我是否可以使用其他功能来获取通用书籍?
(更新)
对不起,这是Book类:
public class Book
{
private int bookID;
private String bookISBN;
private String category;
private int libId;
private String name;
@Override
public String toString()
{
String output = bookISBN + " - " + name + " - " + category + " - ";
return output;
}
public int getBookID()
{
return bookID;
}
public void setBookID(int bookID)
{
this.bookID = bookID;
}
public String getBookISBN()
{
return bookISBN;
}
public void setBookISBN(String bookISBN)
{
this.bookISBN = bookISBN;
}
public int getLibId()
{
return libId;
}
public void setLibId(int libId)
{
this.libId = libId;
}
public String getName()
{
return name;
}
public void setName(String name)
{
this.name = name;
}
}
(更新)
我不知道我必须覆盖Books类来实现这一点,并感谢指出DNA和pbabcdefp。我已经查明了如何做到这一点并且工作正常,这两本清单正在从这两本清单中删除。
这已插入到图书类中,并使用其唯一ID来比较图书是否相等。
@Override
public boolean equals(Object o)
{
if (o == null)
return false;
if (getClass() != o.getClass())
return false;
final Book otherBook = (Book) o;
if (this.bookId != otherBook.bookId)
{
return false;
}
return true;
}
答案 0 :(得分:0)
假设你为Book类定义了一个equals函数,这里有一个函数可以得到两个数组中的公共元素:
public static <T> List<T> getCommonElements(List<T> list1, List<T> list2) {
List<T> resultsList = new ArrayList<>();
for (T element1: list1) {
for (T element2: list2) {
if (element1.equals(element2)) {
resultsList.add(element2);
}
}
}
return resultsList;
}
答案 1 :(得分:0)
这看起来像学校的问题。有了这个,我怀疑你正在寻找一个泛型或比较器的答案,或者覆盖compareTo或者相同的方法。
因此,您可以这样做:
for(int x=0; x<listA.size(); x++)
for(int y=0; y<listB.size(); y++)
if(listA.get(x).getISBN().equals(listB.get(y).getISBN()))
return listA.get(x);
不使用equals进行比较,而是使用他们的ISBN,这应该是他们唯一的id。或者,您可以覆盖Book类中的equals方法来比较ISBN。