按相反顺序排序列表

54

我有一个按直接顺序排列的 List list1 。List<String> list = Ordering.natural().sortedCopy(asu2);

如何更改排序方式?我不知道如何从继承类中重写方法,请给出示例或讲解清楚。


1
您能用示例详细说明您的问题吗? - Ruchira Gayan Ranaweera
3
“change order” 意思是什么?是将列表反转还是根据特定规则应用全新的顺序? - f1sh
你想要列表按降序排序。对吗? - JHS
@EldarNezametdinov - 我回答了你的问题,以获得一个简单的降序。 - JHS
@assylias 这应该是一个答案,而不是一个评论。 - Louis Wasserman
9个回答

121

使用此代码:

Collections.reverse(list);

8
这个排序是按降序排列还是仅仅颠倒了元素插入的顺序? - JHS
6
它只是将元素的顺序颠倒了。 - Eldar Nezametdinov
8
这个答案具有误导性。它没有将一个集合按降序排序,仅仅是将最后一个元素与第一个元素交换,倒数第二个元素与第二个元素交换,以此类推。 - parsecer
这个问题有误导性,如果意图只是将列表反转,那么这个方法可以工作。 - Akhil

60

Collections类中有一个方法reverseOrder,它返回一个Comparator

您可以像这样使用它:Collections.sort(list, Collections.reverseOrder());


我会考虑你的答案,因为不需要在还原后再进行安排。你的方法能够在一个单独的框架中执行两个操作。我不知道其他人怎么想,但谢谢你。 - Loa
2
或者只需使用 list.sort(Collections.reverseOrder()); - T77

42

我会这样做:

personsList.sort(Comparator.comparing(Person::getAge, Comparator.reverseOrder()));

祝你编程愉快 :)


它本应该被选为答案。这正是我一直在寻找的。 - Masuri

18

只需在返回值前加上"-"或负号,即可对任何类型进行反转。

Collections.sort(listed, new Comparator<Object>() {

    @Override
    public int compare(Object o1, Object o2) {

        return -o1.getLeft().compareTo(o2.getLeft());

    }
});

4
希望 compareTo 永远不会返回最小整数,因为 -Integer.MIN_VALUE 仍然等于 Integer.MIN_VALUE。最安全的方法是交换 o1 和 o2,像这样:return o2.getLeft().compareTo(o1.getLeft()) - Pshemo

8

如果你想将列表按照自然顺序排序的相反顺序排列,guava的Ordering类有一个reverse方法:

List<String> list = Ordering.natural().reverse().sortedCopy(asu2);

3

1

尝试使用这种更简洁的方法:

Collections.reverseOrder(
  Comparator.comparing(
    MyEntity::getAFieldToSortBy)));

1

Collections.reverse(List)会将给定的列表就地反转。您还可以使用Guava的Lists.reverse(List)来创建一个由给定列表支持的视图,该视图以相反的顺序而不复制或修改原始列表。

如果您只想创建按自然顺序相反排序的列表,请参阅@assylias关于Ordering.natural().reverse()的答案。


0

list.sort(Comparator.reverseOrder());


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接