我需要通過其中一個params對Java中的對象列表進行排序。這工作得很好,當有一個領帶時,它保持以前的順序。對面的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());
是否有非哈克的方式使其相同的方式工作爲鄰ld代碼呢?我不想在這方面重新發明輪子。
聽起來像是你將不得不重新實現'Comparator.comparingInt'做交換在== ==的情況下 - 不應該太難做! – alfasin
@alfasin - 這種方法不起作用。如果比較器返回'compare(1,1)'以外的任何非零值,那麼最終會得到一些不是有效排序的東西...並且TimSort算法會拋出一個異常(可能)。 –
@StephenC https://gist.github.com/anonymous/0ff43111ef7fecf8ef6f4261a8cfde58 – alfasin