Java 在两个arraylist中查找Commo对象

Java 在两个arraylist中查找Commo对象,java,arraylist,collections,java-8,Java,Arraylist,Collections,Java 8,需要查找到arraylist之间的公共对象。它们都是VarList类型,这是一个简单的POJO类。我的比较返回数据库列表中的所有元素,需要在两个ArrayList之间有一个公共元素(可以看到它们是对象),并将它们添加到新列表中 VarList类 public class VarList { private int number; private int age; private String name; public VarList(int number, int

需要查找到arraylist之间的公共对象。它们都是
VarList
类型,这是一个简单的POJO类。我的比较返回数据库列表中的所有元素,需要在两个ArrayList之间有一个公共元素(可以看到它们是对象),并将它们添加到新列表中

VarList类

public class VarList {
    private int number;
    private int age;
    private String name;
    public VarList(int number, int age, String name) {
        super();
        this.number = number;
        this.age = age;
        this.name = name;
    }
    public int getNumber() {
        return number;
    }
    public void setNumber(int number) {
        this.number = number;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
有问题的我的解决方案

//database arraylist
        ArrayList<VarList> database=new ArrayList<VarList>();
        database.add(new VarList(105,19,"b"));
        database.add(new VarList(101,18,"c"));
        database.add(new VarList(106,54,"database"));
//object array list        
        ArrayList<VarList> object=new ArrayList<VarList>();
        object.add(new VarList(105,19,"b"));
        database.add(new VarList(106,54,"database"));


        List<VarList> resultList = new ArrayList<VarList>();
        for(VarList user1 : database) {
            for(VarList user2 : object) {
                if(user1.getName().equals(user2.getName())) {
                    resultList.add(user2);
                }
                System.out.println(resultList);
            }
        }
//数据库数组列表
ArrayList数据库=新建ArrayList();
添加(新的变量列表(105,19,“b”);
添加(新变量列表(101,18,“c”);
添加(新变量列表(106,54,“数据库”);
//对象数组列表
ArrayList对象=新的ArrayList();
添加(新变量列表(105,19,“b”);
添加(新变量列表(106,54,“数据库”);
List resultList=new ArrayList();
for(VarList user1:数据库){
for(VarList user2:object){
if(user1.getName().equals(user2.getName())){
结果列表.add(user2);
}
System.out.println(结果列表);
}
}
Override
equals
&
hashCode
您需要在
VarList
类中定义of和方法。您的类从继承这些方法

另外,更仔细地考虑命名事物。
VarList
类不是列表,而是列表中的一个元素。当然,它有一个真实的描述性名称。您声明的第二个
ArrayList
名为“object”?!?请永远不要给事物命名为对象。叫它testList什么的


最后,您的
System.out
位于
resultList
循环中,因此它的输出可能会让您感到困惑。或许这是故意的。只需意识到它将为
resultList

中的每个元素输出一次,而不是实现自己的for循环来比较2个ArrayList的元素,您可以使用Collection类的
retainAll(list)

以下是示例用法:

SimplePojo.java

import java.util.Objects;

public class SimplePojo {

  private String name;
  private int age;

  public SimplePojo(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  @Override
  public String toString() {
    return "SimplePojo{" + "name='" + name + '\'' + ", age=" + age + '}';
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    SimplePojo that = (SimplePojo) o;
    return age == that.age && Objects.equals(name, that.name);
  }

  @Override
  public int hashCode() {
    return Objects.hash(name, age);
  }
}
Client.java

import java.util.ArrayList;
import java.util.List;

public class ListCommonElements {

  public static void main(String[] args) {
    List<SimplePojo> list1 = new ArrayList<>();
    list1.add(new SimplePojo("Dave",49));
    list1.add(new SimplePojo("Smith",40));
    list1.add(new SimplePojo("Johnson",32));
    
    System.out.println("List 1: " +list1.toString());

    List<SimplePojo> list2 = new ArrayList<>();
    list2.add(new SimplePojo("Dave",49));
    list2.add(new SimplePojo("Smith",40));
    list2.add(new SimplePojo("Steve",32));
    
    System.out.println("List2: "+list2.toString());

    list1.retainAll(list2);

    System.out.println("Common ELements: " + list1.toString());
  }
}
import java.util.ArrayList;
导入java.util.List;
公共类ListCommonElements{
公共静态void main(字符串[]args){
List list1=新的ArrayList();
列表1.add(新的SimplePojo(“Dave”,49));
列表1.添加(新的SimplePojo(“Smith”,40));
列表1.添加(新的SimplePojo(“Johnson”,32));
System.out.println(“列表1:+list1.toString());
List list2=新的ArrayList();
列表2.add(新的SimplePojo(“Dave”,49));
列表2.add(新的SimplePojo(“Smith”,40));
列表2.add(新的SimplePojo(“Steve”,32));
System.out.println(“List2:+List2.toString());
清单1.保留(清单2);
System.out.println(“公共元素:+list1.toString());
}
}
注意我是如何重写
equals
hashCode
方法的(如果使用IntelliJ,您可以自动生成它)


这样做的原因是您的列表不是基元类型,因此您需要告诉equal对您意味着什么(以便您可以获得公共元素),在当前的实现中,我是说,如果名称和年龄都相同,那么只有我会称2对象为equal。

您的实现有什么问题?如果有更好的方法,那么IDK对Java不是很好,但这似乎是合理的。“哪个有问题”不是一个有用的问题描述。此外,还不清楚“数据库列表”是什么意思。你没有定义“公共元素”;您的代码只比较名称字符串,“equal name”是否打算作为“common element”的定义?