Java:按降序对 ArrayList<Object> 进行排序

标签 java generics collections arraylist

我尝试使用以下代码片段对 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;
}

异常(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

由于我将 comparator 定义为 Comparator<Surec> 类型的对象,所以我不明白为什么会抛出异常。任何人都可以帮助我吗?

最佳答案

DerivedFromSurec 是否实现了 Comparable?

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

关于Java:按降序对 ArrayList<Object> 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5776774/

相关文章:

java - 在 java web 应用程序中,清除任何使用的集合会导致更好的内存管理吗?

java - 使 ActionHandler 忽略箭头键

java - Spring Data Neo4j 节点 NotfoundException

c# - 在 C# 中,我可以编写一个通用函数来返回 null 或将值作为字符串返回吗?

python - 使用可变泛型进行方法返回专门化

java - 泛型和集合 - 类型未定义的方法

java - Java Swing 中的线程不起作用

java - 使用自定义处理程序的 GWT 远程日志记录

java - 具有通用接口(interface)的通用类编译失败

javascript - 根据key查询Typescript数组集合