Collections.reverseOrder() en Java con ejemplos

El método reverseOrder() de la clase Collections que en sí mismo está presente dentro del paquete java.util devuelve un comparador y usando este comparador podemos ordenar la Colección en orden inverso. El ordenamiento natural es el ordenamiento impuesto por el propio método compareTo de los objetos.

Sintaxis:

public static  Comparator reverseOrder()

Parámetro: un comparador cuyo orden debe ser invertido por el comparador devuelto (también puede ser nulo)

Tipo de devolución: un comparador que impone el orden inverso al natural en una colección de objetos que implementan la interfaz Comparable

Ahora, con el fin de profundizar más para comprender a las bases, cubriremos los diferentes casos de uso que se enumeran a continuación de la siguiente manera:

  1. Para ordenar una lista en orden descendente
  2. Para ordenar una array en orden descendente
  3. Para clasificar a los estudiantes en orden descendente de números de rollo cuando hay un comparador definido por el usuario para hacer el reverso.

Caso 1: Para ordenar una lista en orden descendente

Ejemplo 

Java

// Java Program to Demonstrate Working of reverseOrder()
// method of Collections class
// To sort a list in descending order
  
// Importing required utility classes
import java.util.*;
  
// Main class
// Collectionsorting
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
        // Creating a list of integers for which we
        // create an empty ArrayList by
        // declaring object of ArrayList class
        ArrayList<Integer> al = new ArrayList<Integer>();
  
        // Custom input integer elements
        al.add(30);
        al.add(20);
        al.add(10);
        al.add(40);
        al.add(50);
  
        // Using sort() method of Collections class to
        // sort the elements and passing list and using
        // reverseOrder() method to sort in descending order
        Collections.sort(al, Collections.reverseOrder());
  
        // Lastly printing the descending sorted list on
        // console
        System.out.println(
            "List after the use of Collection.reverseOrder()"
            + " and Collections.sort() :\n" + al);
    }
}
Producción

List after the use of Collection.reverseOrder() and Collections.sort() :
[50, 40, 30, 20, 10]

Nota: Geeks ahora deben estar pensando que podemos usar Arrays.sort() ?

Arrays.sort() no se puede usar directamente para ordenar arrays primitivas en orden descendente. Si intentamos llamar al método Arrays.sort() pasando el comparador inverso definido por Collections.reverseOrder(), arrojará el error como se muestra a continuación:

Consejo : Pero esto funcionará bien con ‘Array of Objects’ como la array Integer pero no funcionará con una array primitiva como la array int.

java-collection-framework-fundamentals-self-paced

Caso 2: para ordenar una array en orden descendente

Ejemplo 

Java

// Java Program to Demonstrate Working of reverseOrder()
// method of Collections class
// To Sort an Array in Descending Order
  
// Importing required utility classes
import java.util.*;
  
// Main class
// CollectionSorting
public class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Creating an array to be sorted in descending
        // order
        Integer[] arr = { 30, 20, 40, 10 };
  
        // Collections.sort method is sorting the
        // elements of arr[] in descending order
        // later on Arrays.sort() is applied to sort array
        Arrays.sort(arr, Collections.reverseOrder());
  
        // Printing the sorted array on console
        System.out.println(
            "Array after the use of Collection.reverseOrder()"
            + " and Arrays.sort() :\n"
            + Arrays.toString(arr));
    }
}
Producción

Array after the use of Collection.reverseOrder() and Arrays.sort() :
[40, 30, 20, 10]

Caso 3: Ordenar a los estudiantes en orden descendente de números de rollo cuando hay un comparador definido por el usuario para hacer el reverso.

public static Comparator reverseOrder(Comparator c) 

Devuelve un Comparator que impone el orden inverso de un objeto Comparator pasado. Podemos usar este método para ordenar una lista en orden inverso al Comparador definido por el usuario. Por ejemplo, en el siguiente programa, hemos creado un reverso del comparador definido por el usuario para ordenar a los estudiantes en orden descendente de números de lista. 

Ejemplo:

Java

// Java Program to Demonstrate Working of
// reverseOrder(Comparator c)
// To sort students in descending order of roll numbers
// when there is a user defined comparator to do reverse
  
// Importing required classes
import java.io.*;
import java.lang.*;
import java.util.*;
  
// Class 1
// Helper student class
// to represent a student
class Student {
    int rollno;
    String name, address;
  
    // Constructor
    public Student(int rollno, String name, String address)
    {
  
        // This keyword refers to current instance itself
        this.rollno = rollno;
        this.name = name;
        this.address = address;
    }
  
    // Method of Student class
    // To print student details inside main() method
    public String toString()
    {
  
        return this.rollno + " " + this.name + " "
            + this.address;
    }
}
  
// Class 2
// Helper class implementing interface
class Sortbyroll implements Comparator<Student> {
  
    // Method
    // Used for sorting in ascending order of
    // roll number
    public int compare(Student a, Student b)
    {
        return a.rollno - b.rollno;
    }
}
  
// Class 3
// Main class
class GFG {
  
    // Main driver method
    public static void main(String[] args)
    {
  
        // Creating an empty ArrayList
        ArrayList<Student> ar = new ArrayList<Student>();
  
        // Adding custom attributes defined in Student class
        // using add() method
        ar.add(new Student(111, "bbbb", "london"));
        ar.add(new Student(131, "aaaa", "nyc"));
        ar.add(new Student(121, "cccc", "jaipur"));
  
        // Display message for better readability
        System.out.println("Unsorted");
  
        // Printing list of students
        for (int i = 0; i < ar.size(); i++)
            System.out.println(ar.get(i));
  
        // Sorting a list of students in descending order of
        // roll numbers using a Comparator
        // that is reverse of Sortbyroll()
        Comparator c
            = Collections.reverseOrder(new Sortbyroll());
        Collections.sort(ar, c);
  
        // Display message for better readability
        System.out.println("\nSorted by rollno");
  
        // Printing sorted students in descending order
        for (int i = 0; i < ar.size(); i++)
            System.out.println(ar.get(i));
    }
}

Producción: 

Unsorted
111 bbbb london
131 aaaa nyc
121 cccc jaipur

Sorted by rollno
131 aaaa nyc
121 cccc jaipur
111 bbbb london

La clave aquí para recordar es que el programa anterior utiliza operaciones no controladas e inseguras.

Este artículo es una contribución de Mohit Gupta . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.  

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *