java 一个list对象根据多个相同字段合并一个list
时间: 2025-06-28 07:19:10 浏览: 4
### Java 合并 List 对象根据多个相同字段
为了基于多个相同的字段合并两个 `List` 对象,在 Java 中可以采用自定义类,并覆盖 `equals()` 和 `hashCode()` 方法以确保这些字段用于比较。下面展示了一种方式,其中创建了一个实体类 `Person` 并指定了哪些字段应该参与去重逻辑。
#### 定义实体类 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 (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person) o;
// 只有当name和age都相等时才认为是同一个对象
return age == person.age && Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
```
接着可以通过集合框架中的工具方法来完成合并与去重工作:
#### 使用 Stream API 实现合并与去重
```java
import java.util.*;
import java.util.stream.Collectors;
// 假设有如下两个列表
List<Person> list1 = Arrays.asList(new Person("Alice", 30), new Person("Bob", 25));
List<Person> list2 = Arrays.asList(new Person("Charlie", 35), new Person("Alice", 30));
// 将两个列表合并并通过stream api去除重复项
List<Person> mergedAndDistinctedList = Stream.concat(list1.stream(), list2.stream())
.distinct()
.collect(Collectors.toList());
```
这段代码首先将两个 `List` 转换成流形式,之后调用了 `distinct()` 函数自动过滤掉那些依据 `equals()` 判断为相等的对象实例,最终再收集回新的 `List` 结构中[^1]。
对于更复杂的场景下可能还需要考虑其他因素比如性能优化等问题;另外需要注意的是这里假设了所有要合并的 `List` 都是由同一类型的对象组成的。
阅读全文
相关推荐


















