J'ai essayé au maximum d'utiliser le comparateur avec le type primitif lui-même. Finalement, j'ai conclu qu'il n'y avait aucun moyen de tromper le comparateur, et voici mon implémentation.
public class ArrSortComptr {
public static void main(String[] args) {
int[] array = { 3, 2, 1, 5, 8, 6 };
int[] sortedArr=SortPrimitiveInt(new intComp(),array);
System.out.println("InPut "+ Arrays.toString(array));
System.out.println("OutPut "+ Arrays.toString(sortedArr));
}
static int[] SortPrimitiveInt(Comparator<Integer> com,int ... arr)
{
Integer[] objInt=intToObject(arr);
Arrays.sort(objInt,com);
return intObjToPrimitive(objInt);
}
static Integer[] intToObject(int ... arr)
{
Integer[] a=new Integer[arr.length];
int cnt=0;
for(int val:arr)
a[cnt++]=new Integer(val);
return a;
}
static int[] intObjToPrimitive(Integer ... arr)
{
int[] a=new int[arr.length];
int cnt=0;
for(Integer val:arr)
if(val!=null)
a[cnt++]=val.intValue();
return a;
}
}
class intComp implements Comparator<Integer>
{
@Override //your comparator implementation.
public int compare(Integer o1, Integer o2) {
// TODO Auto-generated method stub
return o1.compareTo(o2);
}
}
Roman : Je ne peux pas dire que c'est un bon exemple, mais puisque vous l'avez demandé, c'est ce qui m'est venu à l'esprit. Supposons que dans un tableau, vous voulez trier des nombres en fonction de leur valeur absolue.
Integer d1=Math.abs(o1);
Integer d2=Math.abs(o2);
return d1.compareTo(d2);
Un autre exemple peut être que vous voulez trier seulement les nombres supérieurs à 100. Cela dépend en fait de la situation. Je ne peux pas penser à d'autres situations. Peut-être qu'Alexandru peut donner plus d'exemples puisqu'il dit qu'il veut utiliser un comparateur pour un tableau d'int.
0 votes
Voulez-vous simplement trier le tableau par ordre décroissant ou voulez-vous effectuer quelque chose de plus compliqué ?
1 votes
Quelque chose de plus compliqué. Je veux trier les int en utilisant la valeur absolue comme clé.