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

avec Java Discussion :

Trier une liste suivant un critère


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 50
    Par défaut Trier une liste suivant un critère
    Bonjour à tous,

    J'ai actuellement une liste de String, que j'aimerais trier suivant un critère.

    Voici mon début de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    List<String> subList;
    subList = tabNDF.subList(borne2, borne1); //je récupère un certain nombre d'éléments d'un tableau Par exemple, de la ligne 13 à 38 du tableau tabNDF
    Chaque ligne de subList se compose ainsi :

    20318880 000006.00 TRAIN
    20312350 000008.00 VOITURE
    20456780 000009.00 TRAIN
    [...]

    Je voudrai trier ma subList sur les caractères 22 à 30 (TRAIN, VOITURE....).

    Ainsi ma subList devrait être trié :

    20318880 000006.00 TRAIN
    20456780 000009.00 TRAIN
    20312350 000008.00 VOITURE

    J'ai vu qu'il fallait utilisé Collections.sort() avec Compare ou Comparable, mais je n'ai pas compris comment le faire.

    Si vous pouviez m'aider, ça serait cool

    Merci

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 585
    Par défaut
    Hello,

    Par exemple, si tu voulais trier par dernier caractère de chaque String :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    List<String> list = Arrays.asList("aaZ", "aaaaA", "aW", "aaaaX");
     
    // on affiche la liste telle que créée.
    System.out.println(list);
     
    // on trie la liste
    Collections.sort(list, (String s1, String s2) -> {
      String last1 = s1.substring(s1.length()-1);
      String last2 = s2.substring(s2.length()-1);
      return last1.compareTo(last2);
    });
     
    // On affiche après tri
    System.out.println(list);
    La notation (String s1, String s2) -> { ... } est une expression lambda, qui représente le Comparator qu'il faut utiliser pour le tri :
    elle prend en paramètre deux String, et indique laquelle doit être classée avant l'autre, en se terminant par un return qui renvoie la comparaison qu'on voulait vraiment (dans mon exemple, la comparaison entre les derniers caractères des deux Strings.)


    À noter, attention, que la List renvoyée par subList() est dite "vivante", c'est-à-dire qu'elle est encore liée à la List sur laquelle on a appelé subList(). Toute modification de la sous-liste affectera aussi la liste de départ.
    Donc si tu tries la sous-liste avec Collections.sort(), cette portion de la liste de début, se retrouvera triée aussi.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 50
    Par défaut
    Donc de ce que je comprends je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    List<String> subList;
    subList = tabNDF.subList(borne2, borne1);
     
    Collections.sort(subList, ??);
     
    //fin de la méthode
     
    //nouvelle méthode
    public int Comparator(String s1, String s2)
    {
    String last1 = s1.substring(20,30);
    String last2 = s2.substring(20,30);
    return last1.compareTo(last2);
    }
    Qu'est-ce que je dois mettre dans le Collections.sort(...) ?

  4. #4
    Modérateur
    Avatar de wax78
    Homme Profil pro
    R&D - Palefrenier programmeur
    Inscrit en
    Août 2006
    Messages
    4 099
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : R&D - Palefrenier programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2006
    Messages : 4 099
    Par défaut
    Ce que Thelvin a proposé

    Peut être que le fait qu'il ait codé pour java 8 ne te plait pas.

    voici un équivalent :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // on trie la liste
    Collections.sort(list, new Comparator<String>()
    {
    	@Override
    	public int compare(String s1, String s2)
    	{
    		String last1 = s1.substring(s1.length() - 1);
    		String last2 = s2.substring(s2.length() - 1);
    		return last1.compareTo(last2);
    	}
    });
    (Les "ça ne marche pas", même écrits sans faute(s), vous porteront discrédit ad vitam æternam et malheur pendant 7 ans)

    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 50
    Par défaut
    Ah oui, on va dire que c'était le java 8 :p

    Merci, c'est top

  6. #6
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

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

    Informations forums :
    Inscription : Octobre 2012
    Messages : 50
    Par défaut
    Tant que vous êtes chaud, j'ai une suite à vous proposer :p

    J'aimerais ensuite sommer les montants des lignes qui ont le même type de dépense :

    De :
    20318880 000006.00 TRAIN
    20318880 000009.00 TRAIN
    20312350 000008.00 VOITURE

    On passerait à :
    20318880 0000015.00 TRAIN
    20312350 000008.00 VOITURE

    Est-ce que je peux le faire en même temps que le tri, ou je dois ensuite reparcourir ma subList ? Comment faire ?

Discussions similaires

  1. Trier une liste suivant 2 critères
    Par stueur666 dans le forum Excel
    Réponses: 2
    Dernier message: 07/02/2012, 16h54
  2. Réponses: 13
    Dernier message: 03/12/2007, 18h06
  3. Réponses: 22
    Dernier message: 19/09/2005, 14h49
  4. [c#] Trier une liste de nombres liés.
    Par Joad dans le forum ASP.NET
    Réponses: 13
    Dernier message: 11/05/2005, 11h17
  5. [Debutant(e)]Trier une liste
    Par LeDébutantJava dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 19/08/2004, 12h44

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