Ver Mensaje Individual
  #1 (permalink)  
Antiguo 13/02/2019, 20:41
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años
Puntos: 6
Implementando Comparator con objetos

Buenas a todos, tengo una consulta para hacer, resulta que tengo una clase Cargo que tiene como atributos id y nombre, luego tengo otra clase llamada Persona que tiene como atributos id, nombre y el cargo que tiene.
Resulta que quiero ordenar las personas por cargos y cuando hago dicha ordenación me borra la anterior persona con el cargo repetido.

Pongo el código:

Código Java:
Ver original
  1. package app.contr.clases;
  2. public class Cargo implements Comparable<Cargo>
  3. {
  4.     private int id;
  5.     private String nom;
  6.     public static int autoID = 0;
  7.     public int getId() {
  8.         return id;
  9.     }
  10.     public void setId(int id) {
  11.         this.id = id;
  12.     }
  13.     public String getNom() {
  14.         return nom;
  15.     }
  16.     public void setNom(String nom) {
  17.         this.nom = nom;
  18.     }
  19.     public Cargo(int xid, String xnom) {
  20.         this.id = xid;
  21.         this.nom = xnom.toUpperCase();
  22.     }
  23.     @Override
  24.     public boolean equals(Object obj) {
  25.         if(obj instanceof Cargo){
  26.             Cargo objc = (Cargo)obj;
  27.             return objc.nom.equals(this.nom);
  28.         }
  29.         else
  30.             return false;
  31.     }
  32.     @Override
  33.     public int hashCode() {
  34.         int hash = 17;
  35.         hash = 31 * hash + this.nom.hashCode();
  36.         return hash;
  37.     }
  38.     @Override
  39.     public String toString() {
  40.         return nom;
  41.     }    
  42.     @Override
  43.     public int compareTo(Cargo o) {
  44.         if (this.nom.compareTo(o.getNom()) > 0)
  45.             return 1;
  46.         else if (this.nom.compareTo(o.getNom()) < 0)
  47.             return -1;
  48.         else
  49.             return 0;
  50.     }
  51.     public static int obtenerMAXID(){
  52.         return autoID + 1;
  53.     }
  54.     public static void incrementarID(){
  55.         autoID++;
  56.     }
  57. }

Código Java:
Ver original
  1. package app.contr.clases;
  2. public class Persona
  3. {
  4.     private final int id;
  5.     private String nom;
  6.     private Cargo cargo;
  7.     public static int autoID = 0;
  8.     public int getId() {
  9.         return id;
  10.     }
  11.     public String getNom() {
  12.         return nom;
  13.     }
  14.     public void setNom(String nom) {
  15.         this.nom = nom;
  16.     }  
  17.     public Cargo getCargo() {
  18.         return cargo;
  19.     }
  20.     public void setCargo(Cargo cargo) {
  21.         this.cargo = cargo;
  22.     }
  23.     public Persona(int xid, String xnom, Cargo xcargo) {
  24.         this.id = xid;
  25.         this.nom = xnom.toUpperCase();
  26.         this.cargo = xcargo;
  27.     }    
  28.     @Override
  29.     public boolean equals(Object obj) {
  30.         if(obj instanceof Persona){
  31.             Persona objp = (Persona)obj;
  32.             return objp.nom.equals(this.nom);
  33.         }
  34.         else
  35.             return false;
  36.     }
  37.     @Override
  38.     public int hashCode() {
  39.         int hash = 17;
  40.         hash = 31 * hash + this.nom.hashCode();
  41.         return hash;
  42.     }    
  43.     @Override
  44.     public String toString() {
  45.         return nom;
  46.     }
  47.     public static int obtenerMAXID(){
  48.         return autoID+1;
  49.     }
  50.     public static void incrementarID(){
  51.         autoID++;
  52.     }
  53. }

Ordena personas por cargo de forma creciente:

Código Java:
Ver original
  1. package app.vista.util;
  2. import app.contr.clases.Persona;
  3. import app.vista.facade.FacadeContr;
  4. import java.util.Comparator;
  5. public class OrdenarPerXCA implements Comparator<Integer>
  6. {
  7.     @Override
  8.     public int compare(Integer o1, Integer o2) {
  9.         Persona p1 = FacadeContr.getInstance().ContrPersonas().findAll().get(o1);
  10.         Persona p2 = FacadeContr.getInstance().ContrPersonas().findAll().get(o2);
  11.         return p1.getCargo().getNom().compareTo(p2.getCargo().getNom());        
  12.     }    
  13. }

Ordena personas por cargo de forma decreciente:

Código Java:
Ver original
  1. package app.vista.util;
  2. import app.contr.clases.Persona;
  3. import app.vista.facade.FacadeContr;
  4. import java.util.Comparator;
  5. public class OrdenarPerXCD implements Comparator<Integer>
  6. {
  7.     @Override
  8.     public int compare(Integer o1, Integer o2) {
  9.         Persona p1 = FacadeContr.getInstance().ContrPersonas().findAll().get(o1);
  10.         Persona p2 = FacadeContr.getInstance().ContrPersonas().findAll().get(o2);
  11.         return p2.getCargo().getNom().compareTo(p1.getCargo().getNom());
  12.     }    
  13. }

Necesito solucionar esta falla y no sé cómo, espero sus respuestas y saludos.
__________________
Si te interesa, visita mi perfil de Linkedin. Gracias