Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1846 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [Java]Modification de code[Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Java]Modification de code[Résolu]

n°1352253
Gattuso
Posté le 23-04-2006 à 16:44:22  profilanswer
 

Bonjour,  
 
je voudrais savoir comment modifier ce code pour qu'il m'affiche la même chose mais ordonné suivant le nom .  
 
Merci  
 
list est de type List<Person>  
 
 

Code :
  1. public String affiche(){
  2.     StringBuilder sb  = new StringBuilder();
  3.    
  4.     for(Person p : list){
  5.         sb.append("Nom : " ).append(p.getName());
  6.         sb.append(", type : " ).append(p.getClass()).append("\n" );
  7.     }
  8.     return sb.toString();
  9.     }


Message édité par Gattuso le 24-04-2006 à 14:01:04
mood
Publicité
Posté le 23-04-2006 à 16:44:22  profilanswer
 

n°1352254
kadreg
profil: Utilisateur
Posté le 23-04-2006 à 16:47:05  profilanswer
 

Code :
  1. public String affiche(){
  2.     StringBuilder sb  = new StringBuilder();
  3.    
  4.     Collections.sort (list)
  5.     for(Person p : list) {
  6.         sb.append("Nom : " ).append(p.getName());
  7.         sb.append(", type : " ).append(p.getClass()).append("\n" );
  8.     }
  9.     return sb.toString();
  10.     }


 
 
j'ai pas le courage de tester :o

Message cité 1 fois
Message édité par kadreg le 23-04-2006 à 16:47:59

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°1352255
masklinn
í dag viðrar vel til loftárása
Posté le 23-04-2006 à 16:48:48  profilanswer
 

Code :


kadreg a écrit :

Code :
  1. public String affiche(){
  2.    StringBuilder sb  = new StringBuilder();
  3.    
  4.    Collections.sort (list)
  5.    for(Person p : list) {
  6.        sb.append( "Nom : " ).append(p.getName());
  7.        sb.append( ", type : " ).append(p.getClass()).append( "\n" );
  8.    }
  9.    return sb.toString();
  10.    }


 
 
j'ai pas le courage de tester :o


Fonctionne si Person implémente Comparable (en comparant sur le nom bien sûr), mais ça va faire gueuler moinmoin :o
(accessoirement t'aurais pu utiliser code=java au lieu de cpp, feignasse :o)

Message cité 1 fois
Message édité par masklinn le 23-04-2006 à 16:57:04

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1352257
kadreg
profil: Utilisateur
Posté le 23-04-2006 à 16:50:14  profilanswer
 

Ah oui merde, je croyais qu'il triait des strings :o
 
et pour la balise, c'est lui qui a commencé

Message cité 1 fois
Message édité par kadreg le 23-04-2006 à 16:50:34

---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°1352258
masklinn
í dag viðrar vel til loftárása
Posté le 23-04-2006 à 16:59:38  profilanswer
 

kadreg a écrit :

Ah oui merde, je croyais qu'il triait des strings :o


La vieille excuse http://membres.lycos.fr/angel2k/petrus/petrusmax.gif
 
Faut faire gaffe aussi sur le fait que Collections#sort effectue un sort in-place, donc faut faire une shallow copy de la liste avant le sort si on ne veut pas qu'elle soit stockée triée :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1352388
Gattuso
Posté le 23-04-2006 à 22:02:22  profilanswer
 

masklinn a écrit :

Code :


 
Fonctionne si Person implémente Comparable (en comparant sur le nom bien sûr), mais ça va faire gueuler moinmoin :o
(accessoirement t'aurais pu utiliser code=java au lieu de cpp, feignasse :o)


La classe qui doit implémenter Comparable est abstraite, cela ne fonctionne pas .
Il n'y a pas d'autres méthodes ?

n°1352401
the real m​oins moins
Posté le 23-04-2006 à 22:39:54  profilanswer
 

Comparator, qu'on te dit.


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1352405
masklinn
í dag viðrar vel til loftárása
Posté le 23-04-2006 à 22:42:17  profilanswer
 

Gattuso a écrit :

La classe qui doit implémenter Comparable est abstraite


Heuu, et alors?
 
Je sais pas ce que t'as fumé, mais chez moi ça fonctionne très bien:

Code :
  1. import java.util.ArrayList;
  2. import java.util.Collections;
  3. import java.util.List;
  4.  
  5. public abstract class Person implements Comparable<Person> {
  6.     private String name;
  7.     private String surname;
  8.     private String title;
  9.  
  10.     public static void main(String[] args) {
  11.         Manager manager = new Manager( "Doe", "John" );
  12.         CodeMonkey monkey = new CodeMonkey( "Monkey", "Code" );
  13.         
  14.         List<Person> employees = new ArrayList<Person>();
  15.         
  16.         employees.add(monkey);
  17.         employees.add(manager);
  18.         
  19.         System.out.println( "Pre-sort employees" );
  20.         for(Person p: employees) {
  21.             System.out.println(p);
  22.         }
  23.         System.out.println( "" );
  24.         Collections.sort(employees);
  25.         System.out.println( "Post-sort employees" );
  26.         for(Person p: employees) {
  27.             System.out.println(p);
  28.         }
  29.     }
  30.     
  31.     public Person(String name, String surname) {
  32.         this.name = name;
  33.         this.surname = surname;
  34.         this.title = getTitle();
  35.     }
  36.     public abstract String getTitle();
  37.  
  38.     public int compareTo(Person elm) {
  39.         return name.compareTo(elm.name);
  40.     }
  41.  
  42.     @Override
  43.     public String toString() {
  44.         StringBuffer out = new StringBuffer();
  45.         out.append(title);
  46.         out.append( " " );
  47.         out.append(surname);
  48.         out.append( " " );
  49.         out.append(name);
  50.         return  out.toString();
  51.     }
  52. }


Code :
  1. public class Manager extends Person {
  2.  
  3.     public Manager(String name, String surname) {
  4.         super(name, surname);
  5.     }
  6.  
  7.     @Override
  8.     public String getTitle() {
  9.         return "Manager";
  10.     }
  11. }


Code :
  1. public class CodeMonkey extends Person {
  2.  
  3.     public CodeMonkey(String name, String surname) {
  4.         super(name, surname);
  5.     }
  6.  
  7.     @Override
  8.     public String getTitle() {
  9.         return "Code Monkey";
  10.     }
  11.  
  12. }


 
Output:

Pre-sort employees
Code Monkey Code Monkey
Manager John Doe
 
Post-sort employees
Manager John Doe
Code Monkey Code Monkey


Person est abstract, c'est la classe qui implémente Comparable (et compareTo, ses classes dérivées ne touchent jamais à compareTo), ça marche [:john keats]  
 
Après, pour le débat sur Comparator/Comparable, joue avec -- il aime bien en discuter de manière calme et courtoise :o


Message édité par masklinn le 23-04-2006 à 22:46:54

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1352407
the real m​oins moins
Posté le 23-04-2006 à 22:45:07  profilanswer
 

non


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°1352409
masklinn
í dag viðrar vel til loftárása
Posté le 23-04-2006 à 22:47:22  profilanswer
 


mais si, fais donc pas ton timide :o


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
mood
Publicité
Posté le 23-04-2006 à 22:47:22  profilanswer
 

n°1352536
LvR
Posté le 24-04-2006 à 10:37:56  profilanswer
 

C'est quoi le pb avec Comparable ?

n°1352558
LvR
Posté le 24-04-2006 à 10:56:19  profilanswer
 

Je me répond a moi meme : c'est vrai qu'avec Comparable ca défini aussi l'égalité d'object, ca peut poser pb dans le cas de structure qui ne gere pas les doublons ...
 
j'y avait jamais pensé tiens

n°1352564
souk
Tourist
Posté le 24-04-2006 à 11:04:19  profilanswer
 

en fait c'est Benou, spa -- [:dawao]
 
le truc, c'est qu'il y a mille facons de comparer deux objets "Person" et a ce titre que ca n'a pas de sens reel que la classe Person implemente Comparable (comparaison par age, par nom, taille de bite, que sais-je encore [:dawa] ) et il est donc preferable d'utiliser un Comparator dedie au type de comparaison que l'on souhait mettre en oeuvre [:romf]

n°1352565
masklinn
í dag viðrar vel til loftárása
Posté le 24-04-2006 à 11:04:48  profilanswer
 

LvR a écrit :

C'est quoi le pb avec Comparable ?


Comparable ne devrait être utilisé que quand il y a un véritable ordre naturel aux objects, càd qu'il n'y a qu'une manière "sensible" de les comparer (exemple pour les nombres l'ordre naturel de comptage).
 
Les autres objets, pouvant potentiellement avoir de multiples bases de comparaisons (et d'ordonnancement) devraient utiliser des comparators (puisqu'ils n'ont pas de base de comparaison unique et intrinsèque, uniquement des conventions).
 
Exemple, les strings peuvent être comparés par ordre alphabétique (dictionnaire), mais il faut décider de la position que l'on donne aux lettres accentuées (aux caractères non-ascii en fait), au fait que la comparaison prenne en compte la casse ou pas, se demander si on effectue une comparaison numérique intelligente ou pas (== "foo2" devrait-il être avant ou après "foo10"? en comparaison alpha classique il sera après, en comparaison numérique intelligente il sera avant), etc etc etc.
 
Donc philosophiquement parlant les Strings par exemple ne devraient pas implémenter Comparable mais devraient en permanence utiliser des Comparators. En pratique néamoins dans la mesure ou le tri de chaînes le plus fréquent se fait par ordre lexicographique la majorité des langages (java compris) implémentent une comparaison par ordre lexicographique par défaut sur les strings.
 
C'est un cas classique de pûreté vs simplicité.
 
Ici, si la seule comparaison qui soit jamais effectuée est faite sur le nom autant utiliser Comparable (IMO), ça ne vaut pas le coup de se faire chier avec des Comparator.
Par contre si d'autres types de tris doivent être effectués (tri par âge, par profession, ...; et il est probable que ce soit le cas) mieux vaut passer par des Comparators on y gagne sur le long terme.

LvR a écrit :

Je me répond a moi meme : c'est vrai qu'avec Comparable ca défini aussi l'égalité d'object, ca peut poser pb dans le cas de structure qui ne gere pas les doublons ...
 
j'y avait jamais pensé tiens


L'utilisation de Comparator aussi définit des égalités [:spamafote]

souk a écrit :

en fait c'est Benou, spa -- [:dawao]
 
le truc, c'est qu'il y a mille facons de comparer deux objets "Person" et a ce titre que ca n'a pas de sens reel que la classe Person implemente Comparable (comparaison par age, par nom, taille de bite, que sais-je encore [:dawa] ) et il est donc preferable d'utiliser un Comparator dedie au type de comparaison que l'on souhait mettre en oeuvre [:romf]


Bien sûr que si c'est --, j'ai déjà débattu de ça avec lui :o

Message cité 2 fois
Message édité par masklinn le 24-04-2006 à 11:06:54

---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
n°1352566
souk
Tourist
Posté le 24-04-2006 à 11:06:45  profilanswer
 

masklinn a écrit :


Ici, si la seule comparaison qui soit jamais effectuée est faite sur le nom autant utiliser Comparable (IMO), ça ne vaut pas le coup de se faire chier avec des Comparator.
Par contre si d'autres types de tris doivent être effectués (tri par âge, par profession, ...) mieux vaut passer par des Comparators on y gagne sur le long terme.


 
ouais, aussi [:romf]

n°1352572
LvR
Posté le 24-04-2006 à 11:15:27  profilanswer
 

masklinn a écrit :


L'utilisation de Comparator aussi définit des égalités [:spamafote]


 
oui, oui, bien sur, mais ce que je voulais dire, c'est que Comparator n'est utilisé qu'a la demande, donc pas de risque d'effet de bord contrairement a Comparable, genre si on utilise un Set qui ne gère pas les doublons, si l'object implémente Comparable sur par ex le nom de la personne, on peut perdre des gens sans faire gaffe (si il y a plusieurs personnes avec le meme nom bien sur :P).
 
Apres pour savoir si la comparaison est légitime (naturelle) suivant l'objet, c'est un choix fonctionnel, je ne vais pas débattre la dessus ;)


Message édité par LvR le 24-04-2006 à 11:16:51
n°1352672
Gattuso
Posté le 24-04-2006 à 14:00:31  profilanswer
 

Merci d'avoir résolu mon problème


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [Java]Modification de code[Résolu]

 

Sujets relatifs
[Aide] Code source toolbar ....Help Java JCheckboxMenuItem
[Debutant] [JAVA] afficher le resultat d'une boucle ?Variables HTML avec applet JAVA
[Résolu]Instanciation d'une classe differente selon les arguments[Résolu] Changement de couleur au passage de la souris
[RÉSOLU]Utilisier les 'in' dans une requéte sqlRécupérer le code html d'une page web
interfacage entre java et fortran90[résolu] Probleme de popup sur mon site
Plus de sujets relatifs à : [Java]Modification de code[Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR