我需要通过其中一个参数对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方式使其工作方式与旧代码相同?我不想重新发明轮子。
答案 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());