Continuando con las colecciones, vamos a ver los mismo métodos y procedimientos usados en el post anterior, pero esta vez exclusivamente con Java.

Nuestra clase Persona en Java quedaría del siguiente modo:

public class Persona implements Comparable{
    public Persona(String _name,
            String _apellidos,
            boolean _isMan,
            LocalDate fechaNacimiento,
            String _lugarNacimiento){
        nombre=_name;
        apellidos=_apellidos;
        isMan =_isMan;
        nacimiento=fechaNacimiento;
        lugarNacimiento=_lugarNacimiento;
    }

    String nombre;
    String apellidos;
    LocalDate nacimiento;
    String lugarNacimiento;
    Boolean isMan;

    public String getNombre() {
        return nombre;
    }

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

    public String getApellidos() {
        return apellidos;
    }

    public void setApellidos(String apellidos) {
        this.apellidos = apellidos;
    }

    public LocalDate getNacimiento() {
        return nacimiento;
    }

    public void setNacimiento(LocalDate nacimiento) {
        this.nacimiento = nacimiento;
    }

    public String getLugarNacimiento() {
        return lugarNacimiento;
    }

    public void setLugarNacimiento(String lugarNacimiento) {
        this.lugarNacimiento = lugarNacimiento;
    }

    public Boolean getIsMan() {
        return isMan;
    }

    public void setIsMan(Boolean isMan) {
        this.isMan = isMan;
    }

    public int getEdad(){
        LocalDate now= LocalDate.now();
        return now.getYear() -
                nacimiento.getYear() +
                Integer.compare(now.getDayOfYear(), nacimiento.getDayOfYear());
    }

    @Override
    public String toString() {
        return "Persona{" + "nombre=" + nombre + ", apellidos=" + apellidos + ", edad= " + getEdad() + "}";
    }

    public boolean isFrom(String city){
        return lugarNacimiento.equals(city);
    }

    public String getFullName(){
        return String.format("%s, %s", getApellidos(), getNombre());
    }

    @Override
    public int compareTo(Persona o) {
        return this.apellidos.compareTo(o.apellidos);
    }
}

añadimos los elementos a la colección de igual modo, esta vez usando para la fecha la clase LocalDate

 static void addPersonas(){
        personas.add(new Persona("Joaquin", "Martinez Rus", true,LocalDate.of(1969, 2, 20), "Linares"));
      personas.add(new Persona("Vicky", "Diez Calatayud", false,LocalDate.of(1996, 4, 19), "Calatayud"));
      personas.add(new Persona("Ana Isabel", "Martinez Baloo", false,LocalDate.of(1998, 10, 20), "Cordoba"));
      personas.add(new Persona("Victoria", "Martinez Nurse", false,LocalDate.of(1992, 1, 21), "Cordoba"));
      personas.add(new Persona("Ana", "Rus Maria", false,LocalDate.of(1961, 11, 3), "Linares"));
      personas.add(new Persona("Manuel", "Bonillo Contador", true,LocalDate.of(1978, 12, 26), "Cordoba"));
      personas.add(new Persona("Jose Antonio", "Martinez Arcos", true,LocalDate.of(1974, 9, 4), "Zaragoza"));
      personas.add(new Persona("Vicente", "Rodriguez Iglesias", true,LocalDate.of(1981, 11, 8), "Cordoba"));
      personas.add(new Persona("Alfonso", "Perez Judicial", true,LocalDate.of(2000, 5, 5), "Linares"));
      personas.add(new Persona("Ana", "Martinez Maestre", false,LocalDate.of(2004, 3, 4), "Linares"));
      personas.add(new Persona("Magdalena", "Fuentes Cruz", false,LocalDate.of(2002, 7, 11), "Jaen"));
      personas.add(new Persona("Jose", "Martinez Cintas", true,LocalDate.of(1981, 6, 21), "Linares"));
      personas.add(new Persona("Jose", "Aldea Morata", true,LocalDate.of(1994, 11, 22), "Calatayud"));
      personas.add(new Persona("Maria Isabel", "Diez Campieles", false,LocalDate.of(2005, 8, 1), "Calatayud"));
      personas.add(new Persona("Maria", "Martinez Adriá", false,LocalDate.of(2001, 10, 22), "Jaen"));
      personas.add(new Persona("Pedro José", "Garcia Civil", true,LocalDate.of(1980, 9, 15), "Cordoba"));
      personas.add(new Persona("Luis", "Jiloca Diez", true,LocalDate.of(1995, 6, 15), "Zaragoza"));
      personas.add(new Persona("Juan", "Pintor Escultor", true,LocalDate.of(2000, 10, 22), "Jaen"));
      personas.add(new Persona("Juan", "Goran Esteban", true,LocalDate.of(1974, 7, 14), "Jaen"));
      personas.add(new Persona("Andrea", "Jiloca Diez", false,LocalDate.of(1999, 9, 21), "Calatayud"));
      personas.add(new Persona("Daniel", "Ceular Flower", true,LocalDate.of(1975, 2, 4), "Cordoba"));
    }

y pasamos al primer ejemplo aunque lógicamente solo mostraré el método tradicional y la expresión lambda, las cuales fueron incluidas con Java 8.
Ejemplo 1. ¿cual es el promedio de edad de todas las personas nacidas en Calatayud?
Java tiene algunas variaciones con respecto a C#, de modo que para crear una expresión lambda sobre una colección, debemos crear un stream (o iteración) y sobre este con filter hacemos la función where en C# y por último con mapToDouble, convertimos o mejor dicho creamos un stream de objetos tipo Double a los cuales le calculamos el promedio.

 
static void getAverageAge(String lugarNacimiento){
        double suma=0;
        double count=0;
        for (Persona persona : personas) {
            if (persona.getLugarNacimiento().equals(lugarNacimiento)) {
                suma += persona.getEdad();
                count ++;
            }
        }
        double promedio = suma / count;
        System.out.printf("Las personas nacidas en %s tienen un promedio de edad de %s\n", lugarNacimiento, promedio);
    }
static void getStreamAverageAge(String lugarNacimiento){
        OptionalDouble promedio= personas.
                       stream().
                       filter(k->k.isFrom(lugarNacimiento)).
                       mapToDouble(e->e.getEdad()).
                       average();
        System.out.printf("Las personas nacidas en %s tienen un promedio de edad de %s\n", lugarNacimiento, promedio.getAsDouble());
    }

Ejemplo 2. Queremos listar todos los mayores de edad por orden alfabético de los apellidos. En este ejemplo, debemos implementar la interface Comparator incluir el método compareTo y con esto mostramos el código

     static void printAdults(){
         personas.sort(new Comparator() {
             @Override
             public int compare(Persona o1, Persona o2) {
                 return o1.apellidos.compareTo(o2.apellidos);
             }
         });
         for (Persona persona : personas) {
              if (persona.getEdad()>17)
                {
                    System.out.println(persona.getFullName());
                }
         }
     }
     
     static void printStreamAdults(){
         personas.stream().
                 filter(p->p.getEdad()>17).
                 sorted().
                 forEach(p-> System.out.println(p.getFullName()));
     }

y el resultado que debe ser exactemente igual.
coleccion3

Anuncio publicitario

2 comentarios en “Colecciones II

Deja una respuesta

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s