2011-04-25 3 views
1

Ma tentative de trier un ArrayList en sens inverse (décroissant) commande avec le code suivant - utilisé dans un JSF bean géré pour remplir une grille de données renvoie l'erreur ci-dessous:Java: Tri d'un ArrayList <Object> par ordre décroissant

public List<Surec> getPendingForms() { 
    ... 
    List<Surec> tersSiraliListe = new ArrayList<Surec>(someSet); 
    Comparator<Surec> comparator = Collections.reverseOrder(); 
    Collections.sort(tersSiraliListe,comparator); 
    return tersSiraliListe; 
} 

Exception:

... 

Caused by: javax.el.ELException: /surecler/dashboard.xhtml @43,118 rendered="#{empty surecBean.pendingForms}": Error reading 'pendingForms' on type net.ozar.web.jsfmanaged.SurecBean 
    at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:76) 
    at javax.faces.component.UIComponentBase.isRendered(UIComponentBase.java:390) 
    ... 30 more 
Caused by: java.lang.ClassCastException: net.ozar.entity.DerivedFromSurec cannot be cast to java.lang.Comparable 
    at java.util.Collections$ReverseComparator.compare(Unknown Source) 
    at java.util.Arrays.mergeSort(Unknown Source) 
    at java.util.Arrays.sort(Unknown Source) 
    at java.util.Collections.sort(Unknown Source) 
    at net.ozar.web.jsfmanaged.SurecBean.getPendingForms(SurecBean.java:134) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
    at java.lang.reflect.Method.invoke(Unknown Source) 
    at javax.el.BeanELResolver.getValue(BeanELResolver.java:83) 
    at javax.el.CompositeELResolver.getValue(CompositeELResolver.java:54) 
    at com.sun.faces.el.FacesCompositeELResolver.getValue(FacesCompositeELResolver.java:72) 
    at org.apache.el.parser.AstValue.getValue(AstValue.java:123) 
    at org.apache.el.parser.AstEmpty.getValue(AstEmpty.java:45) 
    at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:186) 
    at com.sun.facelets.el.TagValueExpression.getValue(TagValueExpression.java:71) 
    ... 31 more 

Depuis je définissais comparateur comme un objet de type < Surec Comparator> Je ne underst et pourquoi l'exception est levée. Tout le monde peut m'aider avec ça?

+1

Il me semble assez bizarre - et mauvais - que Collections.reverseOrder () est paramétré avec un plutôt qu'un >, car il ne peut jamais fonctionner réellement pour des objets non comparables. –

Répondre

1

Le problème est que vos entités DerivedFromSurec ne sont pas comparables. Votre Surec classe doit implémenter java.lang.Comparable.

4

Est-ce que DerivedFromSurec est implémentable?

Sauf si vous fournissez votre propre Comparator mise en œuvre, plutôt que la mise en œuvre donnée par Collections.reverseOrder(), vous devrez implémenter l'interface Comparable. L'alternative est de fournir votre propre comparateur.

+0

Down vote sans explication? – Joel

+0

aucune idée pourquoi une downvote. c'est plus un de moi –

+0

+1 de moi non plus. – Bozho

0

Mettre en oeuvre votre propre interface comparable (ascendante comme il devrait l'être) par votre classe personnalisée si vous utilisez l'un puis procédez comme suit: Collections.sort(list, Collections.reverseOrder());

Questions connexes