Maison  >  Article  >  Java  >  Comment trouver des éléments en double dans un flux en Java

Comment trouver des éléments en double dans un flux en Java

PHPz
PHPzavant
2023-09-06 15:57:101500parcourir

Comment trouver des éléments en double dans un flux en Java

La recherche d'éléments en double dans un flux de données est l'une des questions courantes lors des entretiens Java et même de nombreux examens d'étudiants. Java fournit une variété de méthodes pour rechercher les éléments en double. Nous nous concentrons principalement sur deux méthodes : la première consiste à utiliser le Set du Java Collection Framework et l'autre consiste à utiliser la méthode intégrée Collections.Frequency() du flux. .

Programme Java pour rechercher des éléments en double dans un flux

Avant d'aborder les différentes méthodes permettant d'obtenir des doublons à partir d'une collection de données, il est nécessaire de discuter de la méthode filter(). Ce sera une partie importante de l’exemple de programme.

filtre()

Cela nous permet de filtrer les éléments du flux en fonction de conditions spécifiées. Cela fait partie d'une fonction d'ordre supérieur qui applique un certain comportement au terme de flux. Cette méthode prend un prédicat comme paramètre et renvoie une liste d'éléments qui correspondent au prédicat.

Grammaire

                
filter(predicate);

Utilisation du framework de collection Java

Il s'agit d'une sous-interface de Java Collection Interface et n'autorise pas les valeurs en double. C'est très similaire aux ensembles mathématiques. Nous pouvons utiliser la méthode add() qui ajoute uniquement les éléments différents à l’ensemble. Pour utiliser les propriétés de l'interface Set, nous devons utiliser la classe HashSet qui implémente cette interface.

Exemple

L'exemple suivant illustre comment utiliser l'interface Set pour rechercher des éléments en double dans un flux.

Méthode

  • Utilisez la méthode Arrays.asList() pour créer une liste afin de stocker une liste de taille fixe.

  • Ensuite, utilisez la classe HashSet pour définir un Set afin de stocker uniquement les éléments différents.

  • Maintenant, utilisez la méthode filter() avec stream() et forEach() pour filtrer uniquement les éléments en double. Ici, stream() spécifie l'entrée sous la forme d'un flux et nous utiliserons forEach() pour itérer et imprimer les éléments répétés.

import java.util.*;
public class Duplicate {
   public static void main(String []args) {
      // create a list with duplicate items
      List<Integer> itemsList = Arrays.asList(10, 12, 10, 33, 40, 40, 61, 61);
      // declaring a new Set 
      Set<Integer> newitemSet = new HashSet<>();
      System.out.println("The list of duplicate Items: ");
      itemsList.stream() // converting list to stream
         .filter(nums -> !newitemSet.add(nums)) // to filter out the elementsthat are not added to the set
         .forEach(System.out::println); // print the duplicates
   }
}

Sortie

The list of duplicate Items: 
10
40
61

Utilisez la méthode Collections.Frequency()

Un autre moyen le plus simple de filtrer les éléments en double d'un flux ou d'une collection consiste à utiliser la méthode Collections.Frequency() du package "java.util", qui est utilisée pour renvoyer le nombre total d'éléments dans la collection spécifiée.

Grammaire

Collections.frequency(nameOfCollection, obj);

ici,

nameOfCollection représente le flux et obj représente l'élément dont la fréquence doit être déterminée.

Exemple

Dans l'exemple ci-dessous, nous utiliserons la méthode Collections.Frequency() pour compter les occurrences de chaque élément dans le flux, puis renverrons les éléments qui apparaissent plus d'une fois. Nous imprimerons la liste complète des occurrences d’éléments répétés ainsi que le décompte.

import java.util.*;
public class FindDuplicates {
   public static void main(String[] args) {
      // create a list with duplicate items
      List<Integer> itemslist = Arrays.asList(10, 12, 10, 10, 33, 40, 40, 61, 61);
      System.out.println("The list of duplicate Items with frequency: ");
      itemslist.stream() // converting list to stream 
         .filter(itr -> Collections.frequency(itemslist, itr) > 1) // checking the frequency of duplicate items
         .forEach(System.out::println); // printing the frequency of duplicate items
      System.out.println("Count of duplicate items: ");    
      // to count the duplicate items    
      System.out.println(itemslist.stream()
       .filter(itr -> Collections.frequency(itemslist, itr) > 1)
       .count());
    }
}

Sortie

The list of duplicate Items with frequency: 
10
10
10
40
40
61
61
Count of duplicate items: 
7

Exemple

Voici un autre exemple où nous utiliserons à la fois la méthode Set Interface et Collections.Frequency() pour obtenir uniquement les éléments en double. La méthode Collections.Frequency() comptera les occurrences de chaque élément dans le flux, puis collectera les éléments dont le nombre est supérieur à 1 dans un ensemble pour supprimer les doublons. L’ensemble résultant contiendra uniquement des éléments répétés du flux.

import java.util.stream.*;
import java.util.*;
public class FindDuplicates {
   public static void main(String[] args) {
      // create a list with duplicate items
      List<Integer> itemslist = Arrays.asList(10, 12, 10, 10, 33,40, 40, 61, 61);
      // set to store duplicate items
      Set<Integer> duplicates = itemslist.stream()
         .filter(itr -> Collections.frequency(itemslist, itr) > 1) // checking the frequency of duplicate items
         .collect(Collectors.toSet()); // adding only duplicate items to set
      // printing the duplicate items    
      System.out.println("The list of duplicate Items:" + duplicates); 
   }
}

Sortie

The list of duplicate Items:[40, 10, 61]

Conclusion

Dans cette section, nous conclurons notre discussion avec quelques points clés tirés des exemples et concepts ci-dessus. Nous pouvons utiliser la méthode filter() pour filtrer des types spécifiques d'éléments de la collection de données. Il fonctionne en coulisses en appliquant un prédicat à chaque élément. La capacité de Set Interface à stocker uniquement des éléments distincts en fait un excellent choix pour une tâche donnée.

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer