在Java8中,可以使用stream()和distinct()方法对List对象根据某一字段进行去重。

假设有一个Person类,包含name和age字段,我们想对一个List对象根据name字段进行去重,可以按照以下步骤进行操作:

  1. 使用stream()方法将List转换为流。
  2. 使用distinct()方法根据name字段进行去重。
  3. 使用collect()方法将流转换为List对象。

下面是一个示例代码:

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {
        List<Person> persons = new ArrayList<>();
        persons.add(new Person("Alice", 20));
        persons.add(new Person("Bob", 25));
        persons.add(new Person("Alice", 20));
        persons.add(new Person("Charlie", 30));

        List<Person> distinctPersons = persons.stream()
                .distinct()
                .collect(Collectors.toList());

        distinctPersons.forEach(System.out::println);
    }
}

class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null || getClass() != obj.getClass()) {
            return false;
        }
        Person person = (Person) obj;
        return age == person.age && name.equals(person.name);
    }

    @Override
    public int hashCode() {
        return 31 * name.hashCode() + age;
    }
}

在上面的示例中,我们重写了Person类的equals()和hashCode()方法,以便在去重时比较name字段的值

list对象根据某一字段去重 Java8

原文地址: https://www.cveoy.top/t/topic/iyhu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录