Maison > Java > javaDidacticiel > Java Stream.distinct()

Java Stream.distinct()

Mary-Kate Olsen
Libérer: 2024-11-26 15:09:09
original
809 Les gens l'ont consulté

Java Stream.distinct()

La méthode Stream.distinct() en Java est utilisée pour filtrer les éléments en double d'un flux, garantissant que le flux résultant ne contient que des éléments uniques. Cela fonctionne sur la base de la méthode equals() des objets du flux.

Cette méthode fait partie de l'API Java Stream introduite dans Java 8 et est couramment utilisée pour gérer des collections ou des tableaux avec des valeurs en double.

Exemple 1 : Supprimer les doublons d'une liste de chaînes

Imaginez que vous avez une liste de noms et que certains noms sont répétés. Vous voulez une liste de noms uniques.

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

public class Main {
    public static void main(String[] args) {
        // List of names with duplicates
        List<String> names = List.of("Alice", "Bob", "Alice", "Charlie", "Bob", "David");

        // Use Stream.distinct() to remove duplicates
        List<String> uniqueNames = names.stream()
                                        .distinct()
                                        .collect(Collectors.toList());

        System.out.println(uniqueNames);
        // Output: [Alice, Bob, Charlie, David]
    }
}

Copier après la connexion

Comment ça marche :

La méthode distinct() compare chaque nom et ne conserve que la première occurrence d'un doublon.

Exemple 2 : Supprimer les doublons d'une liste de numéros
Prenons une liste de numéros où des doublons existent et extrayons uniquement les numéros uniques.

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

public class Main {
    public static void main(String[] args) {
        // List of numbers with duplicates
        List<Integer> numbers = List.of(1, 2, 3, 2, 4, 3, 5);

        // Use Stream.distinct() to remove duplicates
        List<Integer> uniqueNumbers = numbers.stream()
                                             .distinct()
                                             .collect(Collectors.toList());

        System.out.println(uniqueNumbers);
        // Output: [1, 2, 3, 4, 5]
    }
}

Copier après la connexion

Comment ça marche :

Les nombres sont comparés en utilisant leur égalité naturelle (basée sur equals() pour Integer), donc les doublons sont filtrés.

Exemple 3 : Travailler avec des objets simples
Créons une classe Product et supprimons les doublons en fonction de l'identifiant du produit.

Code :

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

class Product {
    private int id;
    private String name;

    public Product(int id, String name) {
        this.id = id;
        this.name = name;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Product product = (Product) o;
        return id == product.id;
    }

    @Override
    public int hashCode() {
        return Objects.hash(id);
    }

    @Override
    public String toString() {
        return "Product{id=" + id + ", name='" + name + "'}";
    }
}

public class Main {
    public static void main(String[] args) {
        // List of products with duplicates (based on id)
        List<Product> products = List.of(
            new Product(1, "Laptop"),
            new Product(2, "Tablet"),
            new Product(1, "Laptop"), // Duplicate
            new Product(3, "Smartphone"),
            new Product(2, "Tablet")  // Duplicate
        );

        // Use Stream.distinct() to remove duplicates
        List<Product> uniqueProducts = products.stream()
                                               .distinct()
                                               .collect(Collectors.toList());

        System.out.println(uniqueProducts);
        // Output:
        // [Product{id=1, name='Laptop'}, Product{id=2, name='Tablet'}, Product{id=3, name='Smartphone'}]
    }
}

Copier après la connexion

Explication :

Contrôle d'égalité : la méthode equals() est remplacée pour garantir que les objets Product sont considérés comme égaux en fonction de leur identifiant.

Suppression des doublons : lorsque distinct() rencontre deux produits avec le même identifiant, il ne conserve que le premier.

Sortie : vous obtenez une liste de produits uniques.

Compréhension simplifiée

  1. Pour les objets primitifs ou simples (comme Integer, String) :

distinct() supprime les doublons en comparant directement les valeurs.

Exemple : [1, 2, 2, 3] devient [1, 2, 3].

  1. Pour les objets personnalisés :

Vous devez implémenter les méthodes equals() et hashCode() pour la classe.

distinct() utilise ces méthodes pour déterminer si deux objets sont des doublons.

Cas d'utilisation : Filtrage des noms en double à partir des entrées utilisateur
Imaginez qu'un utilisateur saisisse des noms à plusieurs reprises dans un formulaire et que vous souhaitiez vous assurer que seuls les noms uniques sont stockés.

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

public class Main {
    public static void main(String[] args) {
        // Simulate user input
        List<String> userInput = new ArrayList<>();
        userInput.add("John");
        userInput.add("Mary");
        userInput.add("John"); // Duplicate
        userInput.add("Alice");

        // Remove duplicates
        List<String> uniqueInput = userInput.stream()
                                            .distinct()
                                            .collect(Collectors.toList());

        System.out.println(uniqueInput); // Output: [John, Mary, Alice]
    }
}

Copier après la connexion

Cela garantit que l'application ne stocke que des noms uniques sans nécessiter de vérification manuelle des doublons.

Dernier point à retenir :

distinct() est simple : il supprime les doublons d'un flux.

Pour les types primitifs ou immuables : utilisez-le simplement directement.

Pour les objets personnalisés : assurez-vous que les implémentations d'equals() et de hashCode() sont appropriées.

Conseil pratique : utilisez-le pour nettoyer les données en double sous n'importe quelle forme (par exemple, listes, entrées utilisateur, résultats de base de données).

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal