Ordonner un Iterator

Ordonner un Iterator - Java - Programmation

Marsh Posté le 10-05-2011 à 21:33:48    

Bonjour les amis,  
 
Je viens vous voir car ça fait bout de temps que j’essaie d'ordonner un iterator et je ne vois pas comment faire.
 
Alors j'ai crée une liste déroulante avec  JComboBox choice = new JComboBox();
Cette liste nommée 'choice' et va se retrouver dans un panel : jPanelTop.add(choice);

Code :
  1. // Remplie la liste déroulante avec mes noms de gènes qui se trouvent dans la classe Gene
  2.         Iterator <Gene> iterat = controleur.getGenome().getList().iterator(); //tranform the list into iterator
  3.         while (iterat.hasNext())
  4.         {
  5.           Gene temp = (Gene) iterat.next();
  6.           // on remplit la liste déroulante en mettant les noms, qui sont dans la méthode getName de la classe Gene
  7.                   choice.addItem(""+temp.getName());
  8.         }
  9. //Maintenant je veux ordonner cette liste mais d'après mes recherches il faut d'abord passer par un ArrayList pour faire le "sort()"
  10.  
  11.          ArrayList<Gene> jeVeuxOrdonner = new ArrayList<Gene>();
  12.        iterat = controleur.getGenome().getList().iterator();
  13.        
  14.         while (iterat.hasNext())
  15.                {
  16.           jeVeuxOrdonner.add(iterat.next());
  17.          
  18.         }
  19.         Collections.sort(jeVeuxOrdonner);


 
Mais ça ne marche pas. Une idée ?
Merci,


Message édité par deltamoins le 10-05-2011 à 23:11:48
Reply

Marsh Posté le 10-05-2011 à 21:33:48   

Reply

Marsh Posté le 10-05-2011 à 22:36:45    

Ordonner un iterateur n'a pas de sens, ce qu'il faut c'est ordonner ta liste. En ce sens, ton deuxieme exemple devrait marcher.

 

Tu peux directement utiliser Collections.sort au lieu de creer un ArrayList inutil:
http://download.oracle.com/javase/ [...] il.List%29

Message cité 1 fois
Message édité par mr simon le 10-05-2011 à 22:36:55
Reply

Marsh Posté le 10-05-2011 à 23:05:39    

mr simon a écrit :

Ordonner un iterateur n'a pas de sens, ce qu'il faut c'est ordonner ta liste. En ce sens, ton deuxieme exemple devrait marcher.  
 
Tu peux directement utiliser Collections.sort au lieu de creer un ArrayList inutil:
http://download.oracle.com/javase/ [...] il.List%29


 
Non ça ne marche pas j'avais déjà essayé.
Mon premier code est obligatoire ce n'est pas pour ordonner mais récupérer la liste de noms par iterator.
Ensuite le deuxième code c'est pour transformer mon iterator en arraylist pour pouvoir ordonner.
 
Je suis obligée de passer par ArrayList pour faire Collections.sort et ça ne marche pas.


Message édité par deltamoins le 10-05-2011 à 23:06:15
Reply

Marsh Posté le 10-05-2011 à 23:18:45    

Pour que Collections.sort fonctionne correctement, il faut que tes elements, "Gene", soit comparable, i.e implemente l'interface Comparable, est-ce bien le cas?
 
(cette remarque est aussi valable pour ArrayList.sort())
 
Comment veux tu ordonner ta liste ? je suppose que c'est par order alphabetique pour l'affiicher dans la combo box? dans ce cas:
1. Recuperer la liste
2. Ordonner la liste
3. Ajouter chaque element a la combo box via boucle for.
 
Pour 3, c'est plus lisible de faire quelque chose comme:

Code :
  1. for (Gene gene: aLisT) {
  2.  choice.addItem(gene.getName());
  3. }

Reply

Marsh Posté le 11-05-2011 à 11:06:30    

Je suis dac pour le 3/ mais c'est le 2/ que je n'arrive pas à faire. La est le soucis.

Reply

Marsh Posté le 11-05-2011 à 11:58:01    

deltamoins a écrit :

Je suis dac pour le 3/ mais c'est le 2/ que je n'arrive pas à faire. La est le soucis.


1. Quelle est la définition de Gene?
2. Pourquoi tu utilises des Iterator directement?
3. select is not broken

 
Code :
  1. import java.lang.Comparable;
  2.  
  3. class Gene implements Comparable<Gene> {
  4.    public String name;
  5.  
  6.    public Gene(final String name) {
  7.        this.name = name;
  8.    }
  9.    public int compareTo(Gene other) {
  10.        return this.name.compareTo(other.name);
  11.    }
  12.    public String toString() {
  13.        return "[Gene(" + this.name + " )]";
  14.    }
  15. }


Code :
  1. import java.util.*;
  2. public class Test {
  3.    public static Collection<Gene> getGenes() {
  4.        return new ArrayList<Gene>() {{
  5.            add(new Gene("Foo" ));
  6.            add(new Gene("Bar" ));
  7.            add(new Gene("Baz" ));
  8.            add(new Gene("Qux" ));
  9.            add(new Gene("Quux" ));
  10.            add(new Gene("Corge" ));
  11.            add(new Gene("Grault" ));
  12.        }};
  13.    }
  14.  
  15.    public static void main(String[] args) {
  16.        final List<Gene> sorted = new ArrayList<Gene>();
  17.        
  18.        sorted.addAll(getGenes());
  19.        
  20.        System.out.println(sorted);
  21.        Collections.sort(sorted);
  22.        System.out.println(sorted);
  23.    }
  24. }


> java Test
[[Gene(Foo)], [Gene(Bar)], [Gene(Baz)], [Gene(Qux)], [Gene(Quux)], [Gene(Corge)], [Gene(Grault)]]
[[Gene(Bar)], [Gene(Baz)], [Gene(Corge)], [Gene(Foo)], [Gene(Grault)], [Gene(Quux)], [Gene(Qux)]]


marche très bien chez moi.

mr simon a écrit :

Pour que Collections.sort fonctionne correctement, il faut que tes elements, "Gene", soit comparable, i.e implemente l'interface Comparable, est-ce bien le cas?


Tu peux aussi implémenter un Comparator<Gene> et filer ça en 2e argument à Collections.sort, genre:

Code :
  1. Collections.sort(genes, new Comparator<Gene>() {
  2.    public int compare(Gene g1, Gene g2) {
  3.        return g1.name.compareTo(g2.name);
  4.    }
  5. });


et dans ce cas pas besoin que la classe implémente Comparable.


Message édité par masklinn le 11-05-2011 à 12:04:36

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 18-05-2011 à 00:47:56    

Merci Masklinn et mr simon.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed