Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: paramonso en 06 de Febrero 2019, 11:40

Título: Tuto Java Avanzado Comparator API java Diferencias con Comparable CU00918C
Publicado por: paramonso en 06 de Febrero 2019, 11:40
Hola dejo el ejercicio CU00918C del tutorial pdf de Java avanzado: Interface Comparator (API java). Diferencias con Comparable. Clase Collections. Código ejemplo.

Codigo de la clase TestEjecicio metodo main()
Código: [Seleccionar]
import java.util.ArrayList;
import java.util.Collections;
public class TestEjecicio {
    public static void main(String arg[]) {
        ArrayList<Estudiante> listaEstudiante = new ArrayList<Estudiante>();
        listaEstudiante.add(new Estudiante("Carlos",19,3));
        listaEstudiante.add(new Estudiante("Felipe",18,4));
        listaEstudiante.add(new Estudiante("Ana",18,4));
        listaEstudiante.add(new Estudiante("Rosa",15,1));
        listaEstudiante.add(new Estudiante("Jose",10,2));

        System.out.print("---------------------------------------\n");
        System.out.println("Lista de estudiantes sin ordenar\n---------------------------------------");
        PresentarListas(listaEstudiante);//Se presenta la lista sin ordenar
        System.out.print("---------------------------------------\n");
        System.out.println("Personas Ordenadas por orden natural\n---------------------------------------");
        Collections.sort(listaEstudiante);  // Ordenar por orden natural (alfabetico) por nombre
        PresentarListas(listaEstudiante);   // Presentar la lista 
        System.out.print("---------------------------------------\n ");
        System.out.println("Personas Ordenadas por Edad\n---------------------------------------");
        Collections.sort(listaEstudiante, new CompararEstudiantePorEdad());// Ordenar por edad
        PresentarListas(listaEstudiante);//Presentar la lista
        System.out.print("---------------------------------------\n ");
        System.out.println("Personas Ordenadas por Curso\n---------------------------------------");
        Collections.sort(listaEstudiante, new CompararEstudiantePorCurso());// Ordenar por curso
        PresentarListas(listaEstudiante);//Presentar la lista 
        System.out.println("\n---------------------------------------");
    }
    //Metodo para presentar las listas de estudiantes ordenadas
    public static void PresentarListas(ArrayList<Estudiante> listaEstudiante){
        System.out.print("Presentar la lista listaEstudiante\n");
        System.out.print(listaEstudiante.toString()+"\n");
        System.out.print("Presentar la Clase Estudiante con los metodos get\n");
        System.out.println("\tNombre\tEdad\tCurso\t");
        for(Estudiante tmp:listaEstudiante){
            System.out.print("\t"+tmp.getNombre()+"\t"+tmp.getEdad()+"\t"+tmp.getCurso()+"\n");
        }

       
    }
}

Clase Estudiantes
Código: [Seleccionar]
public class Estudiante implements Comparable<Estudiante> {
    private String nombre;
    private int edad;
    private int curso;

    public Estudiante(){
        nombre="";
        edad=0;
        curso=0;
    }   

    public Estudiante ( String nombre, int edad, int curso) {

        this.nombre = nombre;
        this.edad = edad;
        this.curso = curso;
    }

    @Override
    public String toString() {
        return "Estudiante =>: "+nombre+" Edad: "+edad+" Curso: "+curso+"\n";}

    @Override
    public int compareTo(Estudiante o) {
        return this.nombre.compareTo(o.nombre);
    }

    public String getNombre() {return nombre;}

    public int getEdad() {return edad;}

    public int getCurso() {return curso;}

    public void setNombre() {this.nombre=nombre;}

    public void setEdad() {this.edad=edad;}

    public void setCurso() {this.curso=curso;}
}


Clases CompararEstudiantePorCurso y CompararEstudiantePorEdad
Código: [Seleccionar]
import java.util.Comparator;

public class CompararEstudiantePorCurso implements Comparator<Estudiante> {
    @Override
    public int compare(Estudiante o1, Estudiante o2) {
    return o1.getCurso() - o2.getCurso(); // Devuelve un entero positivo si la altura de o1 es mayor que la de o2
    }
}
Código: [Seleccionar]
import java.util.Comparator;

public class CompararEstudiantePorEdad implements Comparator<Estudiante> {
    @Override
    public int compare(Estudiante o1, Estudiante o2) {
    return o1.getEdad() - o2.getEdad(); // Devuelve un entero positivo si la altura de o1 es mayor que la de o2
    }
}
Adios  ;)
Título: Re:Tuto Java Avanzado Comparator API java Diferencias con Comparable CU00918C
Publicado por: Ogramar en 06 de Diciembre 2019, 18:13
Buenas, para quien revise este ejercicio algunas indicaciones:

- Nombres de clases como CompararEstudiantePorCurso o CompararEstudiantePorEdad no son adecuados. Sería preferible ComparadorDeEstudiantePorCurso o ComparadorDeEstudiantePorEdad. En este hilo pueden verse algunas indicaciones de cómo nombrar clases en Java: https://aprenderaprogramar.com/foros/index.php?topic=3035.msg13698#msg13698

- En el código hay algún comentario erróneo por ejemplo en lugar de
return o1.getCurso() - o2.getCurso(); // Devuelve un entero positivo si la altura de o1 es mayor que la de o2

debería ser
return o1.getCurso() - o2.getCurso(); // Devuelve un entero positivo si el curso de o1 es mayor que el curso de o2

Por lo demás, el código hace lo que pedía el ejercicio correctamente.

Salu2