Merci pour ta réponse. ca n'est pas tout à fait ça, mais ca confirme ce que je pensais faire. En fait il s agit des metiers on cree des matrices <Metier, coeff> MatrixND matCoeffRum0 = MatrixFactory.getInstance().create( "matCoeffRum0", new List[]{ metiers,coeffRum}, new String[]{"Metiers","Coeff"}); que l on rempli avec des tableaux importés depuis des csv. le pb c est que l ordre des metiers dans les tableaux csv est different de celui dans la liste metiers (siMatrix.getMetiers(date)). Du coup je voulais, creer les matrices en utilisant non pas la liste metiers mais une liste des metiers ordonnés comme dans les csv (list<Metier> metiersNous). C'est bien ce que tu proposais ? Une SortedMap est plus pratique ? et apres on creerait la matrice de cette facon : MatrixND matCoeffRum0 = MatrixFactory.getInstance().create( "matCoeffRum0", new List[]{ metiersNous,coeffRum}, new String[]{"Metiers","Coeff"}); Reste a creer la liste/Map metiersNous, j ai essayé comme ça : protected List<Metier> metiers; protected List<Metier> metiersNous; protected List<String> metiersNomsNous; metiersNomsNous = new ArraysList <String>(){"Espagnols", "BolincheProfil2lan", "BolincheProfil2nord","Autre","PelProfil1Gironde", "PelProfil1Landes", "PelProfil1Nord", "PelProfil1Rochebonne", "PelProfil2Gironde", "PelProfil2Landes", "PelProfil2Nord", "PelProfil2Rochebonne", "BolincheProfil1gir", "BolincheProfil1lan"}; for(int i = 0; i<metiersNomsNous.size(); i++){ for (Metier met : metiers){ if(met.getName().equals(metiersNomsNous.getValue(i))){ metierNous.add(met); } } } Mais je ne dois pas bien declarer ma liste parce qu il rale .... :-( Peux tu m expliquer ? MERCI Eric Chatellier a écrit :
Le 02/02/2010 11:24, Sigrid LEHUTA a écrit :
Hello,
Salut,
on a rencontré un probleme récement à propos de l'odre des métiers et des stratégies dans différentes bases. Du coup j airais quelques questions. Voila la situation : En fait l une de nos regles de gestion necessite de charger des coefficients pour chaque métier et strategie à partir de fichiers csv. On avait donc préalablement fait afficher une liste des métiers de la base dans les logs pour savoir dans quel ordre ils étaient rangés, dans quel ordre ils apparaiseent quand on boucle dessus et ranger nos coefficients dans le même ordre dans le csv. - du coup premiere question : d'où vient cet ordre ? par quoi est il déterminé ? Ensuite en voulant utiliser la règle de gestion sur une autre base on s est aperçus que l ordre avait changé. Pourtant cette base avait ete créée a partir de la précédente (par une copie). - du coup on se demande comment ca se fait que l ordre des métiers ait été modifié ?
Finalement pour éviter les problèmes il faudrait que nous chargions nos tableaux de coefficients en s affranchissant de cet ordre. Auiriez vous une idee d un moyen rapide et efficace pour le faire (j ai peur de faire 1000 lignes de code moche, quand 5 jolies suffiraient ;-) ) ? (j ai mis la regle en pj et je suis dispo pour en discuter quand vous voulez)
En effet, 1000 lignes, c'est un peux dur, mais j'ai peut être trouvé quelque chose.
Au début, tu déclares une map de stratégies de cette façon :
mesStrategies = new HashMap<String, Strategy>(); for(Strategy str : allStrategies) { mesStrategies.put(str.getName(), str); } mesStrategies.remove("Espagnols");
Ensuite, tu l'utilise de cette façon :
for(Strategy str : mesStrategies.values()){
Si le soucis, se trouve là, c'est qu'une HashMap ne te garanties aucun ordre.
http://download.java.net/jdk7/docs/api/java/util/HashMap.html : This class makes no guarantees as to the order of the map; in particular, it does not guarantee that the order will remain constant over time.
Le mieux dans ce cas, est d'utiliser une SortedMap(interface) et son implémentation(TreeMap) du package java.util qui te garantie un ordre, par défaut trié suivant l'ordre des clés, les noms de stratégie (alphabétiquement et dépendant de la casse).
Merci d'avance de vos réponses.
N'hésites pas si ce n'est pas ça.
Sigrid
-- Sigrid LEHUTA ~ ><> ~ Doctorante Département Ecologie et Modèles pour l'Halieutique IFREMER, rue de l'ile d'Yeu BP 21105 44311 Nantes Cedex 03 Tél : +33 (0)2 40 37 41 23 (interne : 8123)