web-dev-qa-db-fra.com

Comment obtenir des valeurs uniques dans la liste

J'ai 2 fichiers texte avec des données. Je lis ces fichiers avec BufferReader et mets les données d'une colonne par fichier dans un List<String>.

J'ai dupliqué des données dans chacune d'elles, mais je dois disposer de données uniques dans la première List pour pouvoir confronter les données dupliquées dans la seconde List.

Comment puis-je obtenir des valeurs uniques d'une List?

10
Junior Fulcrum

Cela peut être fait une ligne en utilisant une Set intermédiaire:

List<String> list = new ArrayList<>(new HashSet<>(list));

En Java 8, utilisez distinct() sur un flux:

List<String> list = list.stream().distinct().collect(Collectors.toList());

Sinon, n'utilisez pas de liste du tout; il suffit d'utiliser un ensemble (comme HashSet) dès le début pour la collection pour laquelle vous souhaitez uniquement conserver des valeurs uniques.

17
Bohemian

Convertissez la ArrayList en HashSet .

List<String> listWithDuplicates; // Your list containing duplicates
Set<String> setWithUniqueValues = new HashSet<>(listWithDuplicates);

Si, pour une raison quelconque, vous souhaitez reconvertir le jeu en liste ultérieurement, vous pouvez le faire, mais le plus souvent, cela ne sera pas nécessaire.

List<String> listWithUniqueValues = new ArrayList<>(setWithUniqueValues);
8

En Java 8 :

     // List with duplicates
     List<String> listAll = Arrays.asList("A", "A", "B", "C", "D", "D");

     // filter the distinct 
     List<String> distinctList = listAll.stream()
                     .distinct()
                     .collect(Collectors.toList());

    System.out.println(distinctList);// prints out: [A, B, C, D]

cela fonctionnera également avec des objets, mais vous devrez probablement adapter votre méthode equals.

2
Jorciney

je viens de me rendre compte qu'une solution peut être utile pour d'autres personnes. sera tout d'abord rempli avec les valeurs dupliquées de BufferReader.

ArrayList<String> first = new ArrayList<String>();  

Pour extraire des valeurs uniques, je viens de créer une nouvelle ArrayList comme down:

ArrayList<String> otherList = new ArrayList<>();

    for(String s : first) {
        if(!otherList.contains(s))
            otherList.add(s);
    }

Beaucoup de personnes postées sur Internet parlent d’assigner mon Arraylist à une liste, un ensemble, un tableau de hachage ou un TreeSet. ] Merci pour votre temps les gars.

0
Junior Fulcrum