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
-
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()
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
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
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
}
}
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 ;)
-
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