Regroupemet valeur d'une liste

ezzeddinehannachi Messages postés 22 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 juin 2012 - 18 juin 2012 à 22:11
 Utilisateur anonyme - 21 juin 2012 à 14:50
bsr,
je veux faire un regroupement des valeur récupérer a partir d'une liste.
si vous avez des idées merci d'avance.

13 réponses

cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
19 juin 2012 à 08:11
salut,

ici, des idées, il y en a plein!! bon elles sont pas toujours bonnes, mais bon ^^
qu'appelles-tu un regroupement de valeur?
0
ezzeddinehannachi Messages postés 22 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 juin 2012
19 juin 2012 à 11:01
salut,
ce que je veux faire si par exemple ma liste me retourne :
A
A
B
C
D
D
D
je veux avoir :
A
B
C
D

Merci
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
19 juin 2012 à 11:16
ben imaginons que tu ais un tableau de String (String[] values)
et bien tu fais:

List<String> distinctValues = new ArrayList<String>();
//pour toutes les valeurs du tableau
for (String value : values ) {
  // si la valeur n'est pas contenue dans la liste
  if ( disctinctValues.contains(value) ) {
    //on l'ajoute à la liste
    distinctValues.add(value);
  }
}
0
ezzeddinehannachi Messages postés 22 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 juin 2012
19 juin 2012 à 11:49
mais il va me retourner une liste vide ce code puisque il n'y a aucune valeur contenue dans ma liste
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
19 juin 2012 à 11:53
Il y a une autre solution plus élégante et plus optimale :
Set<String> distinctValues = new HashSet<String>();

for (String value : values) {
   distinctValues.add(value);
}


qui est plus rapide puisque les données sont triées suivant leur hashcode, le temps pour trouver une valeur dans un HashSet est donc logarithmique et non linéaire comme dans une ArrayList.
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
19 juin 2012 à 11:54
Pourtant tu nous as dit que ta liste contenait :
A
A
B
C
D
D
D

faudrait savoir
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
19 juin 2012 à 12:02
Oups, tu as raison.

cormandyr a écrit
if ( disctinctValues.contains(value) )

au lieu de
if ( !disctinctValues.contains(value) )

Avec mon code tu n'auras pas ce problème puisqu'il n'y a pas ce test.
0
ezzeddinehannachi Messages postés 22 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 juin 2012
19 juin 2012 à 12:17
merci cormandyr et jojolemariole
autre question svp
est ce possible avec ce test de recupérer le nombre des valeurs par exemple
le nbr de A =2
le nbr de B =1
le nbr de C =1
le nbr de D =3
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
19 juin 2012 à 13:37
alors je te redirigerais vers l'utilisation d'une map...
Map<String, Integer> counters = new HashMap<String, Integer>();
for (String value : values) {
  // si la valeur n'est pas contenue dans la map
  if ( !counters.containsKey(value) ) {
    //on l'ajoute à la map et on initialise le compteur à 0
    counters.put(value, 0);
  } else {
    counters.put(value, counters.get(value).intValue()+1);
  }
}
0
cs_jojolemariole Messages postés 519 Date d'inscription mercredi 21 mars 2007 Statut Membre Dernière intervention 19 décembre 2016 25
19 juin 2012 à 14:02
Je ramène encore ma fraise juste pour dire que l'initialisation du compteur se fait à 1 ou alors il faut sortir le bloc else.

Sinon pour afficher les résultats :
for (String value : counters.keySet()) {
    System.out.println(value + " : " + counters.get(value));
}
0
cormandyr Messages postés 600 Date d'inscription samedi 20 mai 2006 Statut Membre Dernière intervention 8 juillet 2016 11
19 juin 2012 à 14:08
décidément, faut vraiment que je prenne des vacances....
0
ezzeddinehannachi Messages postés 22 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 19 juin 2012
19 juin 2012 à 14:41
ca marche merci bcp
0
Utilisateur anonyme
21 juin 2012 à 14:50
Passe ton sujet en résolu dans ce cas en cliquant sur Réponse acceptée pour les posts de cormandyr et jojolemariole qui t'ont aidé :D


--
Pylouq
(Lire le Réglement n'a jamais tué personne, au pire ça a instruit des gens.)
0
Rejoignez-nous