Java: сортировка ArrayList <Object>в порядке убывания - PullRequest
1 голос
/ 25 апреля 2011

Моя попытка отсортировать ArrayList в обратном (нисходящем) порядке с помощью следующего фрагмента кода, используемого в управляемом компоненте JSF для заполнения dataGrid, возвращает ошибку ниже:

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

Исключение:

...

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

Поскольку я определил компаратор как объект типа Comparator <<strong> Surec > Я не понимаю, почему выбрасывается исключение.Кто-нибудь может мне помочь с этим?

Ответы [ 3 ]

4 голосов
/ 25 апреля 2011

Реализует ли DerivedFromSurec Comparable?

Если вы не предоставите собственную реализацию Comparator , а не реализацию, заданную Collections.reverseOrder () , вам потребуетсяреализовать сопоставимый интерфейс.Альтернативой является предоставление собственного компаратора.

1 голос
/ 25 апреля 2011

Проблема в том, что ваши DerivedFromSurec объекты не сопоставимы. Ваш класс Surec должен реализовать java.lang.Comparable .

0 голосов
/ 14 февраля 2013

Реализуйте свой собственный сопоставимый интерфейс (в порядке возрастания) через пользовательский класс, если вы его используете, и затем выполните следующие действия: Collections.sort(list, Collections.reverseOrder());

...