Usar fluxos em Java para filtrar duas coleções com base em um determinado campo para remover duplicatas?

Usar fluxos em Java para filtrar duas coleções com base em um determinado campo para remover duplicatas?

Em Java, você pode usar Stream para filtrar e desduplicar duas coleções. A seguir está um exemplo de código que mostra como filtrar e desduplicar com base em um campo de um objeto:

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", 25));
        persons.add(new Person("Bob", 30));
        persons.add(new Person("Alice", 25));
        persons.add(new Person("Charlie", 35));
        persons.add(new Person("Alice", 40));
        persons.add(new Person("Bob", 25));

        // 根据 name 字段进行过滤和去重
        List<Person> filteredAndDistinctPersons = persons.stream()
                .filter(person -> person.getName().equals("Alice"))
                .distinct()
                .collect(Collectors.toList());

        // 打印结果
        filteredAndDistinctPersons.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() {
        returnPerson [name=" + name + ", age=" + age + "]";
    }
}

Neste exemplo, criamos uma classe Person para representar informações pessoais, incluindo dois campos: nome e idade. Usamos o método filter do fluxo para filtrar objetos cujo campo de nome é "Alice" e, em seguida, usamos o método distinto para remover objetos duplicados. Finalmente, usamos o método collect para coletar os resultados em uma nova coleção.

A execução do código de exemplo produz a seguinte saída:

Person [name=Alice, age=25]
Person [name=Alice, age=40]

Esses dois resultados são resultados de filtragem e desduplicação com base no campo de nome ser "Alice".

Existem agora duas listas de coleção. Como desduplicar uma lista com base em um campo de atributo em outra lista para produzir resultados não contidos?

Para desduplicar elementos em outra coleção que não contém o campo de atributo com base em um campo de atributo em uma coleção, é possível usar operações de fluxo e filtro em Java 8+. Aqui está um exemplo de código mostrando como fazer isso:

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

public class Main {
    public static void main(String[] args) {
        // 创建两个对象集合
        List<Person> list1 = new ArrayList<>();
        list1.add(new Person("Alice", 25));
        list1.add(new Person("Bob", 30));
        list1.add(new Person("Charlie", 35));

        List<Person> list2 = new ArrayList<>();
        list2.add(new Person("Alice", 25));
        list2.add(new Person("David", 40));
        list2.add(new Person("Eve", 45));

        // 根据 list2 中的 name 字段,将 list1 中不包含该字段的元素去重
        List<Person> distinctPersons = list1.stream()
                .filter(person -> list2.stream().noneMatch(p -> p.getName().equals(person.getName())))
                .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() {
        returnPerson [name=" + name + ", age=" + age + "]";
    }
}

Neste exemplo, criamos duas coleções list1 e list2, que representam duas coleções de objetos respectivamente. Usamos o método filter do fluxo para filtrar os elementos em list1 que não contêm o campo de nome em list2 e, em seguida, usamos o método distinto para remover duplicatas. Finalmente, usamos o método collect para coletar os resultados em uma nova coleção.

A execução do código de exemplo produz a seguinte saída:

Person [name=Bob, age=30]
Person [name=Charlie, age=35]

Esses dois resultados são baseados no campo de nome em list2, e os elementos em list1 que não contêm esse campo são desduplicados.

Acho que você gosta

Origin blog.csdn.net/weixin_50503886/article/details/132310147
Recomendado
Clasificación