IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Trier une liste de class en fonction d'un de ses parametres


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    .
    Inscrit en
    Octobre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 174
    Par défaut Trier une liste de class en fonction d'un de ses parametres
    Bonjour,

    Alors voila: j'ai une list de class qui integre plusieurs parametre mais je souhaiterais la trier en fonction d'un seul parametre de ma calss.
    Exist-il un moyen simple et rapide de le faire ou faut-il cree une fonction pour ca?
    Merci

    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    public class ClassAtrier{
    int valeur;
    double valeur_a_trier;
    }
     
    List<ClassAtrier> ma_liste_a_trier;
     
    fonctionremplirlist(List<ClassAtrier> ma_liste_a_trier){....}
     
    fonctionTrierList(List<ClassAtrier> ma_liste_a_trier){
    ???
    }

  2. #2
    Membre très actif
    Homme Profil pro
    .
    Inscrit en
    Octobre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 174
    Par défaut
    C'est bon trouve:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    	void fonctionTrierList(){
    		Collections.sort(solutions, new Comparator<ClassAtrier>() {
                public int compare(ClassAtrier o1, ClassAtrier o2) {
                    return o1.getvaleur_a_trier() > o2.getvaleur_a_trier() ? -1 : o1.getvaleur_a_trier() == o2.getvaleur_a_trier() ? 0 : 1;
                }
    		});
    	}

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    En Java 1.8, on peut faire simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void fonctionTrierList(){
      Collections.sort(solutions, (o1, o2) -> Double.compare(o1.getvaleur_a_trier(), o2.getvaleur_a_trier()));
    }
    Il y a plusieurs moyens rapides, mais celui-ci est sympa si getvaleur_a_trier() a un nom plus court et plus simple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre très actif
    Homme Profil pro
    .
    Inscrit en
    Octobre 2014
    Messages
    174
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2014
    Messages : 174
    Par défaut
    Haha merci a toi!

    celui-ci est sympa si getvaleur_a_trier() a un nom plus court et plus simple.
    Oui oui evidement, je me sert de ces nom de variables uniquement pour les exemples, rassure toi, mes variables ont des noms plus courts, simples et lisibles

  5. #5
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par Hyssgrif Voir le message
    C'est bon trouve:
    Les classes wrapper des primitives comportent une méthode static compare().
    C'est plus simple et cela permet de comparer deux valeurs "proprement" (par exemple sur les doubles cela gère les NaN).
    Bref pour une solution pre-Java 8 j'écrirais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	void fonctionTrierList() {
    		Collections.sort(solutions, new Comparator<ClassAtrier>() {
    			public int compare(ClassAtrier o1, ClassAtrier o2) {
    				return Double.compare(o1.getValeur_a_trier(), o2.getValeur_a_trier());
    			}
    		});
    	}
    Citation Envoyé par thelvin Voir le message
    En Java 1.8, on peut faire simplement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    void fonctionTrierList(){
      Collections.sort(solutions, (o1, o2) -> Double.compare(o1.getvaleur_a_trier(), o2.getvaleur_a_trier()));
    }
    Il y a encore plus simple : l'interface Comparator possède désormais des méthodes static "comparing()" permettant de créer facilement des Comparator à partir d'un getter.

    De plus la méthode sort() a été ajouté dans l'interface List, et il est préférable de l'utiliser car cela permet d'utiliser une éventuelle implémentation optimisé pour la liste (c'est le cas pour les ArrayList par exemple).

    Du coup en Java 8 on peut écrire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	void fonctionTrierList() {
    		solutions.sort( Comparator.comparingDouble(ClassAtrier::getValeur_a_trier) );
    	}

    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Trier une liste de classe selon un attribut
    Par pedro570 dans le forum Général Python
    Réponses: 4
    Dernier message: 06/05/2013, 18h04
  2. Trier une liste de "classes"
    Par rambc dans le forum Général Python
    Réponses: 7
    Dernier message: 08/07/2009, 16h30
  3. Réponses: 5
    Dernier message: 22/02/2009, 18h44
  4. la fonction sort pour trier une liste
    Par memo07 dans le forum C++Builder
    Réponses: 3
    Dernier message: 25/11/2007, 16h58
  5. [8.5] trier une liste en fonction de plusieurs dates
    Par Gotch59 dans le forum SAP Crystal Reports
    Réponses: 3
    Dernier message: 12/06/2007, 13h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo