与Java中的稳定排序相反(不稳定?)

时间:2017-04-14 00:47:59

标签: java sorting java-stream comparator

我需要通过其中一个参数对Java中的对象列表进行排序。这样可以正常工作,当有平局时,它会维持之前的顺序。

但是,我的目标是移植一些丑陋的代码,这些代码完全按照自己的方式排序,我必须保留相同的行为。在该算法中,它会在平局的情况下反转先前的顺序。

例如,如果我想通过int:

对这些对象进行排序
{ a, 1}
{ b, 2}
{ c, 1}

我的代码返回:a,c,b

我移植的代码返回:c,a,b

我的代码现在是:

final Comparator<MyObj> myComparator =
    Comparator.comparingInt(MyObj::getSortWeight)
return myObjList
    .stream()
    .sorted(myComparator)
    .map(//doing some other transformations here)
    .collect(Collectors.toList());

是否有一种非hacky方式使其工作方式与旧代码相同?我不想重新发明轮子。

1 个答案:

答案 0 :(得分:6)

如果目标是以相反的顺序具有相同的元素,则可以在排序之前简单地反转列表:

List<MyObj> copy = new ArrayList<>(myObjList);
Collections.reverse(copy);
return copy.stream()
    .sorted(myComparator)
    .map(//doing some other transformations here)
    .collect(Collectors.toList());