gpt4 book ai didi

java - Collections.sort 不是排序

转载 作者:行者123 更新时间:2023-11-29 07:40:43 27 4
gpt4 key购买 nike

我正在使用 Java EE 构建 Web 应用程序(尽管我的问题更多是基于 Java 的)

在 Servlet 中,我正在从 EJB 获取订单列表。在这个订单列表中,有这个订单的状态列表(已发送,在 jetty ,未收到......)

我想按州日期对州列表进行排序。所以我像这样使用 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。还是行不通。

关于为什么它不起作用或我如何修复它有什么想法吗?

编辑:这是列表的 setter/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>

最佳答案

您首先使用自定义比较器对列表进行排序。然后,您根据元素的反向自然 顺序对其进行重新排序,而不是您已经应用的自定义顺序。所以第一种排序没有生效,因为列表是由第二种排序重新排序的。请注意,Collections.reverseOrder() 不会反转列表 - 它是自然顺序的反转(因此 中的元素getEtatList() 必须已经是 Comparable)。

尝试丢掉第二个排序并做:

c.getEtatList().sort(new Comparator<Etat>() {
@Override
public int compare(Etat o1, Etat o2) {
// Note o2/o1 reversed.
return o2.getDateEtat().compareTo(o1.getDateEtat());
}
});

关于java - Collections.sort 不是排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30529549/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com