java取两个list的交集,其中集合元素为自定义的类
时间: 2023-06-14 20:06:38 浏览: 101
要取两个自定义类对象的交集,需要在自定义类中重写 `equals()` 和 `hashCode()` 方法。下面是一个示例代码,假设自定义类为 `Person`:
```java
public class Person {
private String name;
private int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public boolean equals(Object o) {
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
// getters and setters
}
```
使用 `List.retainAll()` 方法可以取两个列表的交集:
```java
List<Person> list1 = new ArrayList<>();
list1.add(new Person("Alice", 25));
list1.add(new Person("Bob", 30));
list1.add(new Person("Charlie", 35));
List<Person> list2 = new ArrayList<>();
list2.add(new Person("Bob", 30));
list2.add(new Person("David", 40));
list1.retainAll(list2);
System.out.println(list1); // 输出 [Person{name='Bob', age=30}]
```
在上面的代码中,`retainAll()` 方法会修改 `list1`,只保留 `list1` 和 `list2` 中都包含的元素。由于 `Person` 类中已经重写了 `equals()` 和 `hashCode()` 方法,因此 `retainAll()` 方法可以正确地比较 `Person` 类型的元素。
阅读全文