Ordenar ArrayList en orden descendente usando Comparator en Java

Un comparador es una interfaz que se utiliza para reorganizar ArrayList de forma ordenada. Se utiliza un comparador para ordenar una ArrayList de objetos definidos por el usuario. En java, se proporciona un comparador en el paquete java.util . El uso de Comparator ordena ArrayList sobre la base de múltiples variables, o simplemente implementa Comparator sin afectar la clase original definida por el usuario. Para ordenar una ArrayList usando Comparator, anule el método compare() proporcionado por la interfaz del comparador. 

Anule el método compare() de tal manera que reordenará una ArrayList en orden descendente en lugar de ascendente. Cambie solo en la parte de comparación por orden descendente. Vea la diferencia entre ambas funciones compare().

Ascending Order
public int compare(Item i1, Item i2)
    {
        if (i1.Property== i2.Property)
            return 0;
        else if (i1.Property > i2.Property)
            return 1;
        else
            return -1;
    }
    
Descending Order
public int compare(Item i1, Item i2)
    {
        if (i1.Property== i2.Property)
            return 0;
        else if (i1.Property < i2.Property)
            return 1;
        else
            return -1;
    }

Si hay alguna necesidad de reordenar una ArrayList en función de la variable de tipo de string como el nombre, etc., reescriba la función compare() como se muestra a continuación.

Ascending Order
public int compare(Shop s1, Shop s2)
    {
        return s1.name.compareTo(s2.name);
    }
    
Descending Order
public int compare(Shop s1, Shop s2)
    {
        return s2.name.compareTo(s1.name);
    }

Ejemplo:

Java

// Java Program to sort the ArrayList
// in descending order using comparator
import java.util.*;
 
// create the Laptop class
class Laptop {
    int ModalNo;
    String name;
    int ram;
    Laptop(int ModalNo, String name, int ram)
    {
        this.ModalNo = ModalNo;
        this.name = name;
        this.ram = ram;
    }
}
 
// creates the comparator for comparing RAM
class RamComparator implements Comparator<Laptop> {
    // override the compare() method
    public int compare(Laptop l1, Laptop l2)
    {
        if (l1.ram == l2.ram) {
            return 0;
        }
        else if (l1.ram < l2.ram) {
            return 1;
        }
        else {
            return -1;
        }
    }
}
 
class GFG {
    public static void main(String[] args)
    {
        // create the ArrayList object
        ArrayList<Laptop> l = new ArrayList<Laptop>();
        l.add(new Laptop(322, "Dell", 2));
        l.add(new Laptop(342, "Asus", 8));
        l.add(new Laptop(821, "HP", 16));
        l.add(new Laptop(251, "Lenovo", 6));
        l.add(new Laptop(572, "Acer", 4));
 
        System.out.println("before sorting");
        System.out.println("Ram"
                           + " "
                           + "Name"
                           + " "
                           + "ModalNo");
        for (Laptop laptop : l) {
            System.out.println(laptop.ram + " "
                               + laptop.name + " "
                               + laptop.ModalNo);
        }
        System.out.println();
 
        System.out.println("After sorting(sorted by Ram)");
        System.out.println("Ram"
                           + " "
                           + "Name"
                           + " "
                           + "ModalNo");
 
        // call the sort function
        Collections.sort(l, new RamComparator());
        for (Laptop laptop : l) {
            System.out.println(laptop.ram + " "
                               + laptop.name + " "
                               + laptop.ModalNo);
        }
    }
}
Producción

before sorting
Ram Name ModalNo
2 Dell 322
8 Asus 342
16 HP 821
6 Lenovo 251
4 Acer 572

After sorting(sorted by Ram)
Ram Name ModalNo
16 HP 821
8 Asus 342
6 Lenovo 251
4 Acer 572
2 Dell 322

Publicación traducida automáticamente

Artículo escrito por meetsuvariya 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 *