1

Estoy haciendo un programa que me registre la plantilla de un equipo de fútbol y también registre la valoración medica del equipo, para eso estoy utilizando un ArrayList para guardar mis datos así

ArrayList<Jugador> jugadores;

y luego los muestro por tablas, tengo varias clases:

  • Persona
  • Jugador
  • Entrenador
  • Auxiliares
  • Valoracion

y sus respectivos formularios, lo que estoy intentando hacer y lo que no he podido lograr es que cuando vaya a registrar una valoración medica no me deje hacerlo si el jugador no está registrado.

Este es el código de mi clase Jugador:

 public class Jugador extends Persona{
    private String pocision;
    private double estatura;
    private double peso;



    public Jugador(String pocision, double estatura, double peso, int id, String nombre, String apellidos, double sueldo) {
        super(id, nombre, apellidos, sueldo);
        this.pocision = pocision;
        this.estatura = estatura;
        this.peso = peso;
    }

    public String getPocision() {
        return pocision;
    }

    public void setPocision(String pocision) {
        this.pocision = pocision;
    }

    public double getEstatura() {
        return estatura;
    }

    public void setEstatura(double estatura) {
        this.estatura = estatura;
    }

    public double getPeso() {
        return peso;
    }

    public void setPeso(double peso) {
        this.peso = peso;
    }


}

he intentado con equals(); y otros más, pero me han servido o bueno no sé como implementarlos

si alguien puede ayudarme con una buena explicación se los agradecería y si tienen un ejemplo sería mejor.

Ruslan López
  • 10,060
  • 11
  • 35
  • 68

1 Answers1

1

Para un mejor manejo de los datos de un ArrayList, te recomiendo que utilices un POJO: Podrías sacar los datos (que se tienen en ese momento) del jugador desde la base y colocarlos en el el ArrayList y luego pasarlos al POJO, con lo cual tendrás los datos en memoria, y luego simplemente consultar si el jugador se encuentra en ese POJO, más o menos así:

private List<Object[]> _listaPersonas = new ArrayList<Object[]>();//ArrayList (con guión bajo)
private List<Persona> listaPersonas;//POJO (sin guión bajo)
public class Persona{
    private String per_codigo = "";
    private String per_nombre = "";
    //los demás campos que necesites...
}

Dentro de una función cargo los datos de la base y los coloco en el ArrayList luego cargo al POJO:

public void cargaPersonas(){
    try{
        _listaPersonas = new ArrayList<>();
        //Aquí realizas la consulta a la base de datos por ejemplo:
        String consulta = 
            "select per_codigo," +
            "       per_nombre"
            "from t_persona";
        rs = stmt.executeQuery(consulta);
        int cols = rs.getMetaData().getColumnCount();
        //Aquí cargo los datos al ArrayList
        while (rs.next()){            
            Object[] arr = new Object[cols];
            for(int i=0; i < cols; i++){
                arr[i] = rs.getObject(i+1);
            }
            _listaPersonas.add(arr);
        }
        //En este momento tengo en el ArrayList los datos de la base, los paso al POJO:
        listaPersonas = new ArrayList<Persona>();
        for(Object[] obj : _listaPersonas){
            Persona per = new Persona(); 
            per.per_codigo  = obj[0] != null ? obj[0].toString() : "";
            per.per_nombre  = obj[1] != null ? obj[1].toString() : "";
            //los demás campos que necesites...
            listaPersonas.add(per);
        }
    }catch(Exception e){
        e.printStackTrace();
    }
}

Entonces tendrás el POJO de tipo Persona con todos los datos de la base, para consultar si un jugador está en ese POJO simplemente hay que iterar el POJO cuando quieras a realizar la valoración:

String cod_persona_actual = "1234";
Iterator<Persona> lisPer = listaPersonas.iterator();
while(lisPer.hasNext()){
    Persona per = lisPer.next();
    if(per.cod_persona.compareTo(cod_persona_actual) == 0){
        //YA EXISTE ESA PERSONA, aquí podrías colocar un boolean en true, así al final del while sabrás si encontró o no esa persona como registrada
    }
}
David Davila
  • 802
  • 3
  • 17
  • David muchas gracias por tu ayuda, pero no estoy utilizando bases de datos y no sabia que era un POJO estoy empezando en esto. – Aldair Jimenez Dec 04 '18 at 02:56
  • Pues bien si es así utiliza simplemente la función .compareTo() dentro de un bucle en el que recorras los datos del jugador. Te recomiendo este post, en el que se explica a breves rasgos el POJO: https://es.stackoverflow.com/questions/11418/cu%C3%A1l-es-la-diferencia-entre-un-pojo-y-un-bean-en-java – David Davila Dec 04 '18 at 03:27
  • 1
    El uso de compareTo de la interfaz Comparable resulta excesivo, ya que el implementar esa interfaz se usa generalmente para ordenar los datos, considero que lo más apropiado es a la antiguita sobreescribir e método equals en el POJO o para hacer algo tipo `boolean duplicado = Jugadores.stream().anyMatch( jugador -> jugador.getId() == ID);` mediante un campo discriminante – Ruslan López Dec 04 '18 at 04:37