Java 在两个arraylist中查找Commo对象
需要查找到arraylist之间的公共对象。它们都是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
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(结果列表);
}
}
Overrideequals
&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”的定义?