2009-05-09 7 views
1

Juste un problème mineur avec Arraylist. Je veux trier un ArrayList<Client> par nom.Comment implémenter un comparateur utilisant des génériques?

Class Client{ String name; int phonenumber ..} 

Ce code effectue le travail, mais je vais avoir un avertissement du compilateur: « utilise des opérations non vérifiées ou dangereuses ». Quel est le problème?

public void sortByName(){ 
    Collections.sort(ListofClients, new NameComparator()); 
} 

Mon comparateur ressemble à ceci:

public class NameComparator implements Comparator{ 
    public int compare(Object client1, Object client) { 
    String name1 = ((Client) client1).getName(); 
    String name2 = ((Client) client2).getName(); 

    return name1.toUpperCase()).compareTo(name2.toUpperCase(); 
    } 
} 

Si j'utilise « implements Comparator<Client> » j'obtiens une erreur: « NameComparator n'est pas un résumé et ne remplace pas la méthode abstraite comparer (client, client) en java.util.Comparator. mon comparateur ne va pas? Désolé pour cette question noob, nouveau java

+0

juste retourner le résultat tout de suite :) – willcodejavaforfood

+0

@bruno Notez que votre comparateur ne gère pas les noms nuls. – McDowell

+0

Pourquoi devrait-il si un objet Client valide ne peut pas avoir un nom nul. –

Répondre

11

Une fois que vous vous implement Comparator<Client> devez changer:

public int compare(Object client1, Object client) 
{ 
    ... 
} 

à cette

public int compare(Client client1, Client client) 
{ 
    // Now you don't have to cast your objects! 
} 

cela est parce que la définition du comparateur

public interface Comparator<T> 
{ 
    public compare(T o1, T o2); 
} 

Remarquez comment le paramètre générique T apparaît dans le nom de la méthode.

Un EDI comme Eclipse/Netbeans/IntelliJ aidera dans cette situation.

+0

merci beaucoup, ça a marché! –

3

Je présume que votre liste de clients est du type

List<Client> 

dans ce cas, votre comparateur doit être de type Comparator<Client> et effectuer la comparaison appropriée (par nom, dans ce cas)

Questions connexes