【发布时间】:2015-05-29 12:23:34
【问题描述】:
我正在使用 Java EE 构建一个 Web 应用程序(尽管我的问题更多基于 Java)
在一个 Servlet 中,我从 EJB 获得一个订单列表。在此订单列表中,有此订单的状态列表(已发送、在码头、未收到...)
我想按州的日期对这个州列表进行排序。所以我像这样使用 Collections.sort:
for (Command c : commands) {
c.getStateList().sort(new Comparator<State>() {
@Override
public int compare(State o1, State o2) {
return o1.getStateDate().compareTo(o2.getStateDate());
}
});
c.getStateList().sort(Collections.reverseOrder());
}
request.setAttribute("commands", commands);
但是当我显示结果时,状态没有排序。
如您所见,我试图颠倒顺序,但它也不起作用。
您还可以看到,我将 Collections.sort 替换为 ListIWantToSort.sort。还是行不通。
关于它为什么不起作用或如何修复它的任何想法?
编辑:这是列表的getter及其实例:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "ciiCommande")
private List<Etat> etatList;
@XmlTransient
public List<Etat> getEtatList() {
return etatList;
}
List<Commande> commandes = new ArrayList<Commande>();
我通过 findAll 方法获取命令。
为了显示它们,我使用它:
<c:forEach items="${commandes}" var="cmd">
<td>${cmd.etatList[0].codeStatut.libelleSituation}</td>
</c:forEach>
【问题讨论】:
-
c.getEtatList()返回什么? -
@LutzHorn 它确实返回了订单所采用的状态列表。
-
getEtatList()中的内容是否实现了Comparable接口? -
@trichetriche 这个列表的 type 到底是什么?
-
getEtatList()是否返回c内的列表副本?如果是这样,您正在对副本进行排序,然后立即将其丢弃,当您再次输出/使用getEtatList()时,您会得到另一个未排序的副本。
标签: java sorting jakarta-ee collections