1
votes

Comment placer des éléments en double d'une liste dans un tableau?

J'ai besoin de trouver des éléments en double dans la collection et de les mettre dans un tableau.

J'ai écrit cette méthode:

JaVa
MaMa
Mama

J'ai cette collection: p >

List<String> duplicates = new ArrayList<>();
        Collections.addAll(duplicates, "java", "JaVa", "mm", "Mama", "ss", "MaMa");

Mais lorsque j'affiche le résultat à l'écran, j'obtiens cette réponse.

String[] mass = new String[(int) limit];

        for (int i = 0; i < duplicates.size(); i++){
            for (int j = 1; j < duplicates.size(); j++){
                if (i != j && duplicates.get(i).equalsIgnoreCase(duplicates.get(j))){
                    mass[j - 1] = duplicates.get(j);
                }
            }

Qu'est-ce que j'ai manqué? p >


3 commentaires

Que contient la liste des mots ?


Sa liste de doublons


Si la liste s'est produite plusieurs fois, vous voulez la collecter dans le tableau @ Mefisto_Fell?


3 Réponses :


1
votes

Je ne veux pas le donner, car il semble que vous apprenez. Astuce: vous pouvez (et peut-être devriez-vous, pour la pratique) accomplir cette tâche avec une boucle. Pas besoin d'utiliser une boucle imbriquée. Gardez à l'esprit que vous pouvez raccourcir une boucle en utilisant duplicates.size () - 1.


0 commentaires

1
votes

Quelques petites choses, la boucle interne a juste besoin d'être tournée vers l'avenir pour que j puisse commencer à i + 1 et à cause de cela, la boucle externe se termine à i . Ensuite, vous ne pouvez pas utiliser I ou j lors de l'attribution à masse , vous avez besoin d'un compteur séparé pour ce

int k = 0;
for (int i = 0; i < duplicates.size() -1; i++){
    for (int j = i + 1; j < duplicates.size(); j++){
        if (duplicates.get(i).equalsIgnoreCase(duplicates.get(j))){
            mass[k] = duplicates.get(i);
            k++;
        }
    }
 }


0 commentaires

2
votes

Si vous souhaitez faire cela en utilisant les flux java-8

  1. Commencez par diffuser la List dans la Map , avec la clé comme String et les valeurs sont Long count of occurrence

String[] array = duplicates.stream().map(String::toLowerCase)
          .collect(Collectors.groupingBy(Function.identity(),Collectors.counting()))
          .entrySet().stream().filter(entry->entry.getValue()>1).map(Map.Entry::getKey).toArray(String[]::new);

   System.out.println(Arrays.toString(array));  //[java, mama]
  1. Filtrez ensuite si l'occurrence est supérieure à 1 et collectez-la sous forme de tableau String , le code ci-dessous montre la combinaison des deux

 Map<String, Long> result =  duplicates.stream().map(String::toLowerCase)
          .collect(Collectors.groupingBy(Function.identity(),Collectors.counting()));
  System.out.println(result);    //{ss=1, mm=1, java=2, mama=2}


4 commentaires

C'est génial, mais comment peut-il être collecté dans List >?


mais pourquoi avez-vous besoin de List > ? et sur quelle base? @Mefisto_Fell


lequel List ou Array ? @Mefisto_Fell


Premier avec liste