Existe-t-il un moyen FACILE de trier un tableau par ordre décroissant, comme dans l'ordre croissant dans classe de tableaux ?
Ou dois-je cesser d'être paresseux et le faire moi-même: [
Vous pouvez utiliser ceci pour trier tout type d'objets
sort(T[] a, Comparator<? super T> c)
Arrays.sort(a, Collections.reverseOrder());
Arrays.sort()
ne peut pas être utilisé directement pour trier les tableaux de primitives dans l'ordre décroissant. Si vous essayez d'appeler la méthode Arrays.sort()
en transmettant le comparateur inverse défini par Collection.reverseOrder()
, l'erreur sera renvoyée.
aucune méthode appropriée trouvée pour le tri (int [], comparateur)
Cela fonctionnera bien avec tableau Integer mais ne fonctionnera pas avec un tableau int.
La seule façon de trier un tableau primitif par ordre décroissant consiste à commencer par trier le tableau par ordre croissant, puis à inverser le tableau en place. Ceci est également vrai pour les tableaux primitifs bidimensionnels.
Vous pouvez utiliser ceci:
Arrays.sort(data, Collections.reverseOrder());
Collections.reverseOrder()
renvoie un Comparator
en utilisant l'ordre naturel inverse. Vous pouvez obtenir une version inversée de votre propre comparateur à l’aide de Collections.reverseOrder(myComparator)
.
pour une liste
Collections.sort(list, Collections.reverseOrder());
pour un tableau
Arrays.sort(array, Collections.reverseOrder());
une alternative pourrait être (pour les chiffres !!!)
Littéralement parlé:
array = -Arrays.sort(-array)
sans comparateur explicite:
Collections.sort(list, Collections.reverseOrder());
avec comparateur explicite:
Collections.sort(list, Collections.reverseOrder(new Comparator()));
Java 8:
Arrays.sort(list, comparator.reversed());
Mise à jour: reversed()
inverse le comparateur spécifié. Habituellement, les comparateurs ont l’ordre croissant, ce qui change l’ordre en ordre décroissant.
Je ne sais pas quel était votre cas d'utilisation, mais en plus d'autres réponses, une autre option (paresseuse) consiste à trier toujours dans l'ordre croissant comme vous l'indiquez, puis à effectuer une itération dans l'ordre inverse.
Vous devez d’abord trier votre tableau en utilisant:
Collections.sort(Myarray);
Ensuite, vous devez inverser l'ordre croissant-décroissant en utilisant:
Collections.reverse(Myarray);
Pour un tableau contenant des éléments de primitives s’il existe org.Apache.commons.lang(3)
, un moyen simple d’inverser un tableau (après le tri) consiste à utiliser:
ArrayUtils.reverse(array);
Une autre solution est que si vous utilisez l'interface Comparable, vous pouvez permuter les valeurs de sortie que vous avez spécifiées dans votre compareTo (Object bCompared).
Par exemple :
public int compareTo(freq arg0)
{
int ret=0;
if(this.magnitude>arg0.magnitude)
ret= 1;
else if (this.magnitude==arg0.magnitude)
ret= 0;
else if (this.magnitude<arg0.magnitude)
ret= -1;
return ret;
}
Où magnitude est un attribut de type de données double dans mon programme. Cela triait ma classe définie freq dans l'ordre inverse de sa magnitude. Donc, pour corriger cela, vous changez les valeurs retournées par <
et >
. Cela vous donne ce qui suit:
public int compareTo(freq arg0)
{
int ret=0;
if(this.magnitude>arg0.magnitude)
ret= -1;
else if (this.magnitude==arg0.magnitude)
ret= 0;
else if (this.magnitude<arg0.magnitude)
ret= 1;
return ret;
}
Pour utiliser ce compareTo, nous appelons simplement Arrays.sort(mFreq)
qui vous donnera le tableau trié freq [] mFreq
.
La beauté (à mon avis) de cette solution est qu’elle peut être utilisée pour trier les classes définies par l’utilisateur, et même plus que cela pour les trier par un attribut spécifique. Si la mise en œuvre d'une interface comparable vous semble décourageante, je vous encourage à ne pas penser ainsi, ce n'est pas le cas. Ce lien sur la façon de mettre en œuvre comparable m'a beaucoup facilité la tâche. En espérant que des personnes puissent utiliser cette solution et que votre joie sera même comparable la mienne.
array.sort(function(a, b) {return b - a;}); //descending
ou
array.sort(function(a, b) {return a - b;}); //ascending
public double[] sortArrayAlgorithm(double[] array) { //sort in descending order
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if (array[i] >= array[j]) {
double x = array[i];
array[i] = array[j];
array[j] = x;
}
}
}
return array;
}
utilisez simplement cette méthode pour trier un tableau de type double par ordre décroissant. Vous pouvez l’utiliser pour trier des tableaux de tout autre type (comme int, float, etc.) simplement en changeant le "type de retour", le "type d’argument" et la variable "x" tapez le type correspondant. vous pouvez également remplacer "> =" par "<=" dans la condition if pour que l'ordre soit croissant.
Vous pouvez utiliser l'opération stream ( Collections.stream () ) avec Comparator.reverseOrder () .
Par exemple, supposons que vous ayez cette collection:
List<String> items = new ArrayList<>();
items.add("item01");
items.add("item02");
items.add("item03");
items.add("item04");
items.add("item04");
Pour imprimer les éléments dans leur ordre "naturel", vous pouvez utiliser la méthode sort () (ou la laisser de côté et obtenir le même résultat):
items.stream()
.sorted()
.forEach(item -> System.out.println(item));
Ou pour les imprimer en ordre décroissant (inverse), vous pouvez utiliser la méthode triée qui prend un comparateur et inverse l’ordre:
items.stream()
.sorted(Comparator.reverseOrder())
.forEach(item -> System.out.println(item));
Notez que cela nécessite que la collection ait implémenté Comparable (de même que Integer, String, etc.).
Cela a fonctionné pour moi:
package doublearraysort;
import Java.util.Arrays;
import Java.util.Collections;
public class Gpa {
public static void main(String[] args) {
// initializing unsorted double array
Double[] dArr = new Double[] {
new Double(3.2),
new Double(1.2),
new Double(4.7),
new Double(3.3),
new Double(4.6),
};
// print all the elements available in list
for (double number : dArr) {
System.out.println("GPA = " + number);
}
// sorting the array
Arrays.sort(dArr, Collections.reverseOrder());
// print all the elements available in list again
System.out.println("The sorted GPA Scores are:");
for (double number : dArr) {
System.out.println("GPA = " + number);
}
}
}
Sortie:
GPA = 3.2
GPA = 1.2
GPA = 4.7
GPA = 3.3
GPA = 4.6
The sorted GPA Scores are:
GPA = 4.7
GPA = 4.6
GPA = 3.3
GPA = 3.2
GPA = 1.2
Je sais que c'est un fil de discussion assez ancien, mais voici une version mise à jour pour Integers et Java 8:
Arrays.sort(array, (o1, o2) -> o2 - o1);
Notez qu'il s'agit de "o1 - o2" pour l'ordre croissant normal (ou Comparator.comparingInt ()).
Cela fonctionne également pour tout autre type d'objets. Dire:
Arrays.sort(array, (o1, o2) -> o2.getValue() - o1.getValue());
Il n'est pas directement possible de trier de manière inverse un tableau de primitives (c'est-à-dire int[] arr = {1, 2, 3};
) à l'aide de Arrays.sort()
et Collections.reverseOrder()
, car ces méthodes nécessitent des types de référence (Integer
) au lieu de types primitifs ( int
).
Cependant, nous pouvons utiliser Java 8 Stream pour commencer par trier le tableau à trier dans l'ordre inverse:
// an array of ints
int[] arr = {1, 2, 3, 4, 5, 6};
// an array of reverse sorted ints
int[] arrDesc = Arrays.stream(arr).boxed()
.sorted(Collections.reverseOrder())
.mapToInt(Integer::intValue)
.toArray();
System.out.println(Arrays.toString(arrDesc)); // outputs [6, 5, 4, 3, 2, 1]