Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获取两个图书列表中的公共元素_Java_List - Fatal编程技术网

Java 获取两个图书列表中的公共元素

Java 获取两个图书列表中的公共元素,java,list,Java,List,我有两个数组列表,用于存储名为Book的类的实例。我正在尝试获取两个列表中的书籍 这是一个搜索功能,允许您通过输入图书的ISBN、名称和作者来搜索图书。列表“resultA”包含输入ISBN和名称的书籍,而另一个列表“resultB”包含输入作者编写的书籍。为了得到最终结果,我需要得到两个数组中的书 我尝试过使用retainAll()函数,但发现它在存储了实例的列表上不起作用 List<Book> resultA = BookManager.getBooksWhere("bo

我有两个数组列表,用于存储名为Book的类的实例。我正在尝试获取两个列表中的书籍

这是一个搜索功能,允许您通过输入图书的ISBN、名称和作者来搜索图书。列表“resultA”包含输入ISBN和名称的书籍,而另一个列表“resultB”包含输入作者编写的书籍。为了得到最终结果,我需要得到两个数组中的书

我尝试过使用retainAll()函数,但发现它在存储了实例的列表上不起作用

    List<Book> resultA = BookManager.getBooksWhere("book_ISBN", ISBN, "book_name", bookName);
    List<Book> resultB = BookManager.getBooksByAuthors(authors);
    resultB.retainAll(resultA);

    searchResults = resultA;
(更新)

我不知道我必须重写Books类才能工作,谢谢你指出DNA和pbabcdefp。我已经查阅了如何做到这一点,它已经正确地工作了,这本常用书正在从两个列表中删除

这被插入到book类中,并使用它们的唯一id来比较books是否相等

    @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;
    }

假设您为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;
 }
公共静态列表getCommonElements(列表列表1、列表列表2){ List resultsList=new ArrayList(); for(T元素1:list1){ for(T元素2:list2){ if(元素1.等于(元素2)){ 结果列表。添加(元素2); } } } 返回结果列表; }
这看起来像是学校的问题。因此,我怀疑您是否在寻找泛型或比较器或覆盖compareTo或equal方法的答案

因此,您可以这样做:

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);

for(int x=0;xDoes
Book
有一个
.equals()
方法(超越对象的默认方法)“
retainAll
以什么方式不起作用?你期望得到什么结果,你实际看到了什么?我们需要看看
Book
类。@pbabcdefp我们不也需要看看BookManager吗?@KickButtowski我不确定,但我的逻辑是如果
BookManager
不起作用,问题就会被解决。”“为什么
getBooksWhere
不起作用?”。所以问题可能出在
Book
中。谢谢,这是我最初寻找的,但现在我已经覆盖了equals方法,retainal()函数现在应该可以正常工作。将在代码中进行编辑。
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);