Java8根据对象其他一个值去重

1. 整体流程

步骤 描述
步骤1 创建一个对象列表
步骤2 根据对象的某个属性进行去重
步骤3 输出去重后的对象列表

2. 实现步骤与代码解释

步骤1:创建一个对象列表

首先,我们需要创建一个对象列表用于示例。假设我们有一个Person类,它有两个属性:nameage

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的streamdistinct方法来实现。

List<Person> distinctPersons = persons.stream()
    .distinct() // 根据默认的equals方法进行对象去重
    .collect(Collectors.toList());

上述代码中,stream()方法将对象列表转换为流,.distinct()方法将根据默认的equals方法进行对象去重,最后使用.collect(Collectors.toList())将流转换为列表。

然而,该方法默认根据equals方法进行对象去重,我们需要根据name属性进行去重。为此,我们需要在Person类中重写equalshashCode方法。

@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根据对象的某个属性进行去重。首先,我们创建了一个对象列表,并且重复添加了一个对象作为示例。然后,我们使用streamdistinct方法根据对象的属性进行去重。最后,我们输出了去重后的对象列表。

代码示例:[Github链接](