Exemple12_SortCollectionRetourTélécharger Comment trier (sort) sur plusieurs critères une collection avec ArrayList Exemple12.java //Comment trier (sort) sur plusieurs critères une collection avec ArrayList import java.util.*; //Classe de définition d'un ecollection de livre gérés dans une bibliothèque // Une collection de livre est caractérisé par : // - le genre des livres (roman, bibliographie, sf , ...) une chaine // - le tableau de livre // class Livres { String genre; ArrayList<Livre> array; public Livres(String genre) { this.genre = genre; array = new ArrayList<Livre>(); } } // Classe de définition des livres class Livre { String titre; String auteur; String ident; public Livre(String ident,String titre, String auteur) { this.titre = titre; this.auteur = auteur; this.ident = ident; } public String getTitre() {return titre;} public String getAuteur() {return auteur;} public String getIdent() {return ident;} public String toString() { return ident+" "+titre+" "+auteur; } } class CompLivreTitre implements Comparator<Livre> { public int compare(Livre l1,Livre l2) { String s1 = l1.getTitre(); String s2 = l2.getTitre(); return( s1.compareTo(s2) ); } } class CompLivreAuteur implements Comparator<Livre> { public int compare(Livre l1,Livre l2) { String s1 = l1.getAuteur(); String s2 = l2.getAuteur(); return( s1.compareTo(s2) ); } } class CompLivreIdent implements Comparator<Livre> { public int compare(Livre l1,Livre l2) { String s1 = l1.getIdent(); String s2 = l2.getIdent(); return( s1.compareTo(s2) ); } } public class Exemple12 { public static void main(String... a_args) { Terminal.ecrireStringln("Exemple 12"); Livres meslivres = new Livres("sf"); Livre l1 = new Livre("2012/01/001","Cavernes d'acier (Les)","Asimov Isaac"); Livre l2 = new Livre("2012/01/002","Fleuve de l'éternité (Le)","Farmer Philip José"); Livre l3 = new Livre("2012/01/003","Dune","Herbert Frank"); Livre l4 = new Livre("2012/01/004","Robot","Asimov Isaac"); Livre l5 = new Livre("2012/01/005","Dieux du fleuve (Les)","Farmer Philip José"); meslivres.array.add(l1); meslivres.array.add(l2); meslivres.array.add(l3); meslivres.array.add(l4); meslivres.array.add(l5); for(Livre l:meslivres.array)Terminal.ecrireStringln(l+""); // Tri par Titre Terminal.ecrireStringln("------ Tri par Titre ----------------------------------------"); Collections.sort(meslivres.array,new CompLivreTitre()); for(Livre l:meslivres.array)Terminal.ecrireStringln(l+""); // Tri par Auteur Terminal.ecrireStringln("----- tri par Auteur -----------------------------------------"); Collections.sort(meslivres.array,new CompLivreAuteur()); for(Livre l:meslivres.array)Terminal.ecrireStringln(l+""); // Tri par Ident Terminal.ecrireStringln("---- tri par Ident ------------------------------------------"); Collections.sort(meslivres.array,new CompLivreIdent()); for(Livre l:meslivres.array)Terminal.ecrireStringln(l+""); } } Terminal.java import java.io.*; public class Terminal{ static BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); public static String lireString() // Lire un String { String tmp=""; char C='\0'; try { tmp = in.readLine(); } catch (IOException e) { exceptionHandler(e); } return tmp; } // fin de lireString() public static int lireInt() // Lire un entier { int x=0; try { x=Integer.parseInt(lireString()); } catch (NumberFormatException e) { exceptionHandler(e); } return x ; } public static boolean lireBoolean() // Lire un entier { boolean b = true; try { b = Boolean.valueOf(lireString()).booleanValue(); } catch (NumberFormatException e) { exceptionHandler(e); } return b; } public static double lireDouble() // Lire un double { double x=0.0; try { x=Double.valueOf(lireString()).doubleValue(); } catch (NumberFormatException e) { exceptionHandler(e); } return x ; } public static char lireChar() // Lire un caractere { String tmp=lireString(); if (tmp.length()==0) return '\n'; else { return tmp.charAt(0); } } public static void ecrireString(String s){ // Afficher un String try{ System.out.print(s); } catch (Exception ex){ exceptionHandler(ex); } } public static void ecrireStringln(String s) // Afficher un String { ecrireString(s); sautDeLigne(); } // fin de ecrireStringln() public static void ecrireInt(int i) // Afficher un entier { ecrireString(""+i); } public static void ecrireIntln(int i) // Afficher un entier { ecrireString(""+i); sautDeLigne(); } public static void ecrireBoolean(boolean b){ ecrireString(""+b); } public static void ecrireBooleanln(boolean b){ ecrireString(""+b); sautDeLigne(); } public static void ecrireDouble(double d) // Afficher un double { ecrireString(""+d); } public static void ecrireDoubleln(double d) // Afficher un double { ecrireDouble(d); sautDeLigne(); } public static void ecrireChar(char c) // Afficher un caractere { ecrireString(""+c); } public static void ecrireCharln(char c) // Afficher un caractere { ecrireChar(c); sautDeLigne(); } public static void sautDeLigne(){ try{ System.out.println(); }catch(Exception ex){ exceptionHandler(ex); } } protected static void exceptionHandler(Exception ex){ TerminalException err = new TerminalException(ex); throw err; } public static void ecrireException(Throwable ex){ ecrireString(ex.toString()); ex.printStackTrace(System.err); } } class TerminalException extends RuntimeException{ Exception ex; TerminalException(Exception e){ ex = e; } } compil.bat mkdir bin del /f /s /q bin\*.class javac -d bin *.java pause run.bat cd bin java Exemple12 pause Execution.txt java Exemple12 Exemple 12 2012/01/001 Cavernes d'acier (Les) Asimov Isaac 2012/01/002 Fleuve de l'éternité (Le) Farmer Philip José 2012/01/003 Dune Herbert Frank 2012/01/004 Robot Asimov Isaac 2012/01/005 Dieux du fleuve (Les) Farmer Philip José ------ Tri par Titre ---------------------------------------- 2012/01/001 Cavernes d'acier (Les) Asimov Isaac 2012/01/005 Dieux du fleuve (Les) Farmer Philip José 2012/01/003 Dune Herbert Frank 2012/01/002 Fleuve de l'éternité (Le) Farmer Philip José 2012/01/004 Robot Asimov Isaac ----- tri par Auteur ----------------------------------------- 2012/01/001 Cavernes d'acier (Les) Asimov Isaac 2012/01/004 Robot Asimov Isaac 2012/01/005 Dieux du fleuve (Les) Farmer Philip José 2012/01/002 Fleuve de l'éternité (Le) Farmer Philip José 2012/01/003 Dune Herbert Frank ---- tri par Ident ------------------------------------------ 2012/01/001 Cavernes d'acier (Les) Asimov Isaac 2012/01/002 Fleuve de l'éternité (Le) Farmer Philip José 2012/01/003 Dune Herbert Frank 2012/01/004 Robot Asimov Isaac 2012/01/005 Dieux du fleuve (Les) Farmer Philip José