Programa Java para ordenar claves en TreeMap usando Comparator con objetos definidos por el usuario

TreeMap en Java se usa para implementar la interfaz Map y NavigableMap junto con la clase AbstractMap . El mapa se ordena según el orden natural de sus claves, o mediante un comparador proporcionado en el momento de la creación del mapa, según el constructor que se utilice. Para ordenar claves en TreeMap usando un comparador con objetos definidos por el usuario en Java, debemos crear una clase que implemente la interfaz Comparator para anular el método de comparación.

// AccordingMarks class that implements the 
// comparator interface to override compare method

class AccordingMarks implements Comparator<Student> {
    public int compare(Student s1, Student s2) {
        return s1.getMarks().compareTo(s2.getMarks());
    }
}

En el siguiente código, estamos pasando un objeto personalizado como clave en TreeMap, es decir, la clase definida por el usuario Student. En este caso, necesitamos pasar el comparador Según Marcas en el constructor, mientras creamos el objeto TreeMap que ordena el TreeMap según las calificaciones del alumno.

Ejemplo 1: Clasificar claves en orden ascendente de las marcas

Java

// Java program to demonstrate how to sort TreeMap of custom
// class objects
import java.util.*;
 
// Custom class
class Student {
 
    private String name;
    private int marks;
 
    public Student(String name, Integer marks)
    {
        this.name = name;
        this.marks = marks;
    }
 
    public String getName() { return this.name; }
 
    public Integer getMarks() { return this.marks; }
    // override toString method
    public String toString()
    {
        return this.name + ": " + marks;
    }
}
 
// Comparator that sort elements according to marks in
// Ascending order
class AccordingMarks implements Comparator<Student> {
    public int compare(Student s1, Student s2)
    {
        return s1.getMarks().compareTo(s2.getMarks());
    }
}
 
// Driver Code
public class GFG {
    public static void main(String[] args)
    {
 
        // New TreeMap of custom class Student
        TreeMap<Student, Integer> map
            = new TreeMap<>(new AccordingMarks());
 
        // Add elements to TreeMap
        map.put(new Student("Akshay", 400), 1);
        map.put(new Student("Bina", 500), 2);
        map.put(new Student("Chintu", 300), 3);
 
        System.out.println(
            "TreeMap keys sorting in ascending order of the marks:");
 
        // Print map using Entry
        for (Map.Entry<Student, Integer> entry :
             map.entrySet()) {
            System.out.println("Key : (" + entry.getKey()
                               + "), Value : "
                               + entry.getValue());
        }
    }
}

Producción:

TreeMap keys sorting in ascending order of the marks:
Key : (Chintu: 300), Value : 3
Key : (Akshay: 400), Value : 1
Key : (Bina: 500), Value : 2

Ejemplo 2: Ordenar claves en orden descendente de las marcas

Java

// Java program to demonstrate how to sort TreeMap of custom
// class objects
import java.util.*;
 
// Custom class
class Student {
 
    private String name;
    private int marks;
 
    public Student(String name, Integer marks)
    {
        this.name = name;
        this.marks = marks;
    }
 
    public String getName() { return this.name; }
 
    public Integer getMarks() { return this.marks; }
    // override toString method
    public String toString()
    {
        return this.name + ": " + marks;
    }
}
 
// Comparator that sort elements according to marks in
// Descending order
class AccordingMarks implements Comparator<Student> {
    public int compare(Student s1, Student s2)
    {
        return s2.getMarks().compareTo(s1.getMarks());
    }
}
 
// Driver Code
public class GFG {
    public static void main(String[] args)
    {
 
        // New TreeMap of custom class Student
        TreeMap<Student, Integer> map
            = new TreeMap<>(new AccordingMarks());
 
        // Add elements to TreeMap
        map.put(new Student("Akshay", 400), 1);
        map.put(new Student("Bina", 500), 2);
        map.put(new Student("Chintu", 300), 3);
 
        System.out.println(
            "TreeMap Keys sorted in descending order of the marks: ");
 
        // Print map using Entry
        for (Map.Entry<Student, Integer> entry :
             map.entrySet()) {
            System.out.println("Key : (" + entry.getKey()
                               + "), Value : "
                               + entry.getValue());
        }
    }
}

Producción:

TreeMap Keys sorted in descending order of the marks: 
Key : (Bina: 500), Value : 2
Key : (Akshay: 400), Value : 1
Key : (Chintu: 300), Value : 3

Publicación traducida automáticamente

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