Это не сортировка отдельных чисел от наибольшего к наименьшему.
Но при этом данный список сортируется в таком порядке, что при добавлении последнего списка чисел будет получено наибольшее возможное число, которое может быть сделано путем добавления входных чисел.
Чтобы получить максимальное число, число (X
) в списке должно появиться перед другим числом (Y
) в списке, если число (X appended with Y
, то есть XY = X + Y
) больше числа (Y appended with X
, то есть YX = Y + X
). Поскольку XY
и YX
имеют одинаковую длину, сравнение чисел XY
и YX
может быть само по себе сравнением строк. Это то, что достигает
new Comparator<String>(){
@Override
public int compare(String X, String Y) {
String XY=X + Y;
String YX=Y + X;
return XY.compareTo(YX) > 0 ? -1:1;
}
});
.
По вашему мнению,
X = 30, Y = 34 , XY = 3034 , YX = 3430, return 1 --> this places 34 before 30
, потому что любая вероятность 34 *** 30 будет больше чем 30 *** 34 при условии, что мы исправим другие числа.
X = 9, Y = 30, XY = 930, YX = 309, return -1 --> this places 9 before 30
, потому что любая возможность 9 *** 30 будет больше, чем 30 *** 9 при условии, что мы исправим другие числа.
Мы можем распространить этот аргумент и на другие наблюдения.