【问题标题】:Java: Sorting an ArrayList<Object> in descending orderJava:按降序对 ArrayList<Object> 进行排序
【发布时间】:2011-08-12 05:12:35
【问题描述】:

我尝试使用以下代码 sn-p 以反向(降序)顺序对 ArrayList 进行排序 - 在 JSF 托管 bean 中用于填充 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 定义为 ComparatorSurec> 类型的对象,所以我不明白为什么会抛出异常。任何人都可以帮助我吗?

【问题讨论】:

  • Collections.reverseOrder() 是用一个普通的 参数化的,而不是一个 >,这让我觉得很奇怪——而且很糟糕,因为它实际上永远不可能为不可比较的对象工作。

标签: java generics collections arraylist


【解决方案1】:

DerivedFromSurec 是否实现 Comparable ?

除非您提供自己的 Comparator 实现,而不是 Collections.reverseOrder() 给出的实现,否则您将需要实现 Comparable 接口。另一种方法是提供您自己的比较器。

【讨论】:

    【解决方案2】:

    问题在于您的 DerivedFromSurec 实体不具有可比性。您的 Surec 类必须实现 java.lang.Comparable

    【讨论】:

      【解决方案3】:

      如果您正在使用自定义类,请通过您的自定义类实现您自己的可比较接口(应该是递增的),然后执行以下操作:Collections.sort(list, Collections.reverseOrder());

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-08-19
        • 2013-04-17
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-09
        • 1970-01-01
        相关资源
        最近更新 更多