Java8根据对象其他一个值去重
1. 整体流程
步骤 | 描述 |
---|---|
步骤1 | 创建一个对象列表 |
步骤2 | 根据对象的某个属性进行去重 |
步骤3 | 输出去重后的对象列表 |
2. 实现步骤与代码解释
步骤1:创建一个对象列表
首先,我们需要创建一个对象列表用于示例。假设我们有一个Person
类,它有两个属性:name
和age
。
class Person {
String name;
int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
}
// 创建对象列表
List<Person> persons = new ArrayList<>();
persons.add(new Person("Alice", 25));
persons.add(new Person("Bob", 30));
persons.add(new Person("Charlie", 25));
persons.add(new Person("Alice", 25)); // 重复的对象
步骤2:根据对象的某个属性进行去重
接下来,我们需要根据对象的某个属性进行去重。在这个例子中,我们将根据name
属性进行去重。我们可以使用Java8的stream
和distinct
方法来实现。
List<Person> distinctPersons = persons.stream()
.distinct() // 根据默认的equals方法进行对象去重
.collect(Collectors.toList());
上述代码中,stream()
方法将对象列表转换为流,.distinct()
方法将根据默认的equals
方法进行对象去重,最后使用.collect(Collectors.toList())
将流转换为列表。
然而,该方法默认根据equals
方法进行对象去重,我们需要根据name
属性进行去重。为此,我们需要在Person
类中重写equals
和hashCode
方法。
@Override
public boolean equals(Object obj) {
if (this == obj) {
return true;
}
if (obj == null || getClass() != obj.getClass()) {
return false;
}
Person person = (Person) obj;
return Objects.equals(name, person.name);
}
@Override
public int hashCode() {
return Objects.hash(name);
}
步骤3:输出去重后的对象列表
最后,我们可以输出去重后的对象列表。
for (Person person : distinctPersons) {
System.out.println(person.name + " - " + person.age);
}
结论
本文介绍了如何使用Java8根据对象的某个属性进行去重。首先,我们创建了一个对象列表,并且重复添加了一个对象作为示例。然后,我们使用stream
和distinct
方法根据对象的属性进行去重。最后,我们输出了去重后的对象列表。
代码示例:[Github链接](