2016-06-15 1 views
0

J'ai une liste d'objets avec des propriétés normales et un hashmap de valeurs de champs personnalisées et j'essaie de trouver un moyen de tri basé sur la valeur d'un champ personnalisé dans cette carte.Utilisation de BeanComparator pour trier les propriétés mappées

classe Exemple:

class Result { 

    int id; 
    String name; 
    Date date; 

    Map customFields; 

    int getId() { 
     return id; 
    } 

    etc.... 

    String getCustomField(String fieldId) { 
     return customFields.get(fieldId); 
    } 

    public void setCustomField(String fieldId, Object value) { 
     customFields.put(fieldId, value); 
    } 

} 

L'utilisation d'un BeanComparator avec des propriétés "normales" la liste trie bien. Mais la tentative d'une propriété mappée me donne:

java.lang.RuntimeException: NoSuchMethodException: java.lang.NoSuchMethodException: Propriété inconnue « CustomField » + sur la classe de haricot Résultat

Voici comment je suis en train de le faire :

ComparatorChain chain = new ComparatorChain(); 
chain.addComparator(new BeanComparator("customField(field99)")); 

Collections.sort(results, chain); 

Des idées?

TIA

Répondre

0

Je l'ai trouvé. Le problème est que le Getter doit renvoyer Object not String.