Вот вспомогательный метод для выполнения этой работы.
Прежде всего вам понадобится новый интерфейс Comparator, так как Comparator не поддерживает примитивы:
public interface IntComparator{
public int compare(int a, int b);
}
(Конечно, вы могли бы сделать это с помощью автобокса / распаковки, но я не пойду туда, это ужасно)
Затем, вот вспомогательный метод для сортировки массива int с использованием этого компаратора:
public static void sort(final int[] data, final IntComparator comparator){
for(int i = 0; i < data.length + 0; i++){
for(int j = i; j > 0
&& comparator.compare(data[j - 1], data[j]) > 0; j--){
final int b = j - 1;
final int t = data[j];
data[j] = data[b];
data[b] = t;
}
}
}
А вот код клиента.Тупой компаратор, который сортирует все числа, которые состоят только из цифры «9» вперед (снова отсортированы по размеру), а затем остальные (для любого товара):
final int[] data =
{ 4343, 544, 433, 99, 44934343, 9999, 32, 999, 9, 292, 65 };
sort(data, new IntComparator(){
@Override
public int compare(final int a, final int b){
final boolean onlyNinesA = this.onlyNines(a);
final boolean onlyNinesB = this.onlyNines(b);
if(onlyNinesA && !onlyNinesB){
return -1;
}
if(onlyNinesB && !onlyNinesA){
return 1;
}
return Integer.valueOf(a).compareTo(Integer.valueOf(b));
}
private boolean onlyNines(final int candidate){
final String str = String.valueOf(candidate);
boolean nines = true;
for(int i = 0; i < str.length(); i++){
if(!(str.charAt(i) == '9')){
nines = false;
break;
}
}
return nines;
}
});
System.out.println(Arrays.toString(data));
Вывод:
[9, 99, 999, 9999, 32, 65, 292, 433, 544, 4343, 44934343]
Код сортировки был взят из Arrays.sort (int []) , и я использовал только версию, оптимизированную для крошечных массивов.Для реальной реализации вы, вероятно, захотите взглянуть на исходный код внутреннего метода sort1(int[], offset, length)
в классе Arrays .