实现Java Stream List根据某几个字段去重

1. 整体流程

步骤表格

步骤 描述
1 创建一个自定义的类,重写hashCode()和equals()方法
2 使用Stream的distinct()方法去重
3 将List转换为Stream,使用collect()方法将去重后的元素收集为List

2. 具体步骤及代码示例

步骤1:创建一个自定义的类,重写hashCode()和equals()方法

首先,你需要创建一个自定义的类,比如Person类,然后重写该类的hashCode()和equals()方法,以便Stream能够正确去重。

public class Person {
    private String name;
    private int age;

    // 构造方法

    // getter和setter方法

    @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 && Objects.equals(name, person.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

步骤2:使用Stream的distinct()方法去重

接下来,使用Stream的distinct()方法可以很方便地去除重复元素。

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

步骤3:将List转换为Stream,使用collect()方法将去重后的元素收集为List

最后,将去重后的Stream再通过collect()方法转换为List。

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

关系图

erDiagram
    Person {
        string name
        int age
    }

通过以上步骤,你可以实现Java Stream List根据某几个字段去重的操作,希望对你有帮助。如果有任何疑问,欢迎随时向我提问。