Doublons dans une ArrayList [Résolu]

Messages postés
5
Date d'inscription
mercredi 7 avril 2010
Dernière intervention
10 décembre 2010
- - Dernière réponse : jm2lrepresent
Messages postés
5
Date d'inscription
mercredi 7 avril 2010
Dernière intervention
10 décembre 2010
- 10 déc. 2010 à 13:55
Bonjour à tous!
Je suis dans l'obligation de solliciter une nouvelle fois votre aide!!
Mon problème est le suivant:

Dans le cadre d'un projet portant sur la création d'un carnet d'adresses, un souci majeur me fait face... Le but du jeu est donc de créer un gestionnaire de contacts, chaque contact étant représenté par une fiche, et, ici, je voudrais classer toutes mes fiches par nom de famille.
Dans le bout de code fourni, on a tableauDeFiches qui contient toutes les fiches à trier, et on a tableauDeNoms, qui contient les noms de famille associés à chacune des fiches. Ce dernier est trié alphabétiquement, et ces 2 tableaux sont de même taille. Le problème, c'est que dans le cas de 2 personnes du même nom, tableauDeNoms a 2 cases identiques. Et, lorsque je veux récupérer l'indices de la fiche correspondante dans tableauDeFiches, fatalement, je me retrouve avec 2 fois la même fiche...

Voilà un bout du code, j'espère qu'il est suffisamment clair.


String s;
ArrayList<Object> tableauDeFiches = new ArrayList<Object>();
ArrayList<String> tableauDeNoms = new ArrayList<String>();
int indice[] = new int[tableauDeFiches.size()];

for(int i = 0; i < tableauDeFiches.size(); i++){
for(int j = 0; j < tableauDeNoms.size(); j++){
s = tableauDeFiches.get(j).getNom(); // On récupère le nom associé à une fiche
// Le nom récupéré existe dans tableauDeNoms
// Dès qu'il est trouvé, il faut incrémenter le tableau d'indices
if(s.equals(tableauDeNoms.get(i))){
indice[i] = j;
// Traitement à effectuer que je ne comprends pas
// tableauDeNoms.remove(i); ???
// tableauDeNoms.set(i,""); ???
// Utilisation d'un break; ??
}
}
}


J'ai essayé beaucoup de bidouillages, sans succès, c'est pourquoi je fais appel à vous.
En espérant avoir été assez explicite.

Cordialement,
jm2lrepresent
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
Messages postés
17
Date d'inscription
vendredi 19 mai 2006
Dernière intervention
6 juin 2011
3
Merci
Un truc du genre ne te conviendrais pas pour classer tes fiches par ordrer alphabétique ?

final List<Fiche> fiches = new ArrayList<Fiche>();

//fill your list here

Collections.sort(fiches, new Comparator<Fiche>() {
@Override
public int compare(final Fiche f1, final Fiche f2) {
return f1.getLastname().compareTo(f2.getLastname())
+ f1.getFirstname().compareTo(f2.getFirstname());
}
});

Merci smarticu 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 97 internautes ce mois-ci

Commenter la réponse de smarticu
Messages postés
15838
Date d'inscription
jeudi 8 août 2002
Dernière intervention
4 mars 2013
0
Merci
Salut,

Pourquoi gérer 2 listes en parallèle ? Je serais toi je ferais une seule liste contenant des classes contenant les 2 informations.

Sinon, une remarque en passant : les List sont génériques, alors évite de faire des ArrayList<Object> et spécialise tes types (par exemple : ArrayList), ca t'évitera bien des erreurs.
______________________________________

AVANT de poster votre message, veuillez lire, comprendre, et appliquer notre réglement
Commenter la réponse de cs_DARKSIDIOUS
Messages postés
5
Date d'inscription
mercredi 7 avril 2010
Dernière intervention
10 décembre 2010
0
Merci
Salut DARKSIDIOUS,

Effectivement, en voulant simplifier mon code, j'ai marqué ArrayList<Object> en fait, c'est ArrayList<Fiche>

Je vois pas trop comment je peux m'en sortir avec une seule liste...
Je veux trier mes fiches par nom. Instinctivement, je dirais que je dois récupérer un nom pour chaque fiche, les mettre dans une autre liste, la trier (tableauDeNoms) alphabétiquement.
Ensuite, pour chaque tableauDeNoms.get(i), je veux 1 et 1 seule fiche. Dans mon code, si je crée les fiches fiche1(Dutronc,Jacques) et fiche2(Dutronc,Thomas), je vais avoir
tableauDeFiche = [fiche1, fiche2]
tableauDeNoms = [Dutronc, Dutronc]
et après traitement, mon tableau d'indices sera [0,0] ou [1,1] en fonction de si je mets un break ou non, alors que je veux qu'il soit tel que indices = [0,1]...

Je sais pas si je suis suffisamment clair...
Commenter la réponse de jm2lrepresent
Messages postés
5
Date d'inscription
mercredi 7 avril 2010
Dernière intervention
10 décembre 2010
0
Merci
Avé smarticu!

Je te remercie grandement de ta réponse! Tout marche très bien, je suis fier de toi
Bravo, bravo, bravo!!
Commenter la réponse de jm2lrepresent

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.