Tuesday, March 25, 2014

Lambda JDK8 con NetBeans para Novatos

Ejemplo sencillo de Lambda con NetBeans

Crear un proyecto nuevo
File--> New Project-->Categories: Maven Projects: Java Application

Indicamos el nombre del proyecto

El IDE genera el esqueleto del proyecto



En propiedades del proyecto
Sources--> Source/Binary Format:



Crearemos una clase llamada Persona con los atributos (id,nombre,edad)
Clic derecho el paquete com.avbravo.testlambda --> New--> Java Class




Colocar el nombre: Persona

El IDE genera la nueva clase
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.avbravo.testlambda;

/**
 *
 * @author avbravo
 */
public class Persona {
    
}

Clic derecho en el código -->Seleccionar Insert Code...


Seleccionar Add Property...

Agregamos la propiedad id y tipo String. Se generan los métodos set/get
repetimos el proceso para el atributo String nombre, Integer edad;
Agregamos los métodos constructores
 public Persona() {
    }

    public Persona(String id, String nombre, Integer edad) {
        this.id = id;
        this.nombre = nombre;
        this.edad = edad;
    }

Agregar el método toString(). Clic derecho Insert Code---> toString()


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

Código completo Persona.java:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

package com.avbravo.testlambda;

/**
 *
 * @author avbravo
 */
public class Persona {
    
    private String id;

    private String nombre;

    private Integer edad;

    public Persona() {
    }

    public Persona(String id, String nombre, Integer edad) {
        this.id = id;
        this.nombre = nombre;
        this.edad = edad;
    }

   
    

    /**
     * Get the value of edad
     *
     * @return the value of edad
     */
    public Integer getEdad() {
        return edad;
    }

    /**
     * Set the value of edad
     *
     * @param edad new value of edad
     */
    public void setEdad(Integer edad) {
        this.edad = edad;
    }

    /**
     * Get the value of nombre
     *
     * @return the value of nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * Set the value of nombre
     *
     * @param nombre new value of nombre
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * Get the value of id
     *
     * @return the value of id
     */
    public String getId() {
        return id;
    }

    /**
     * Set the value of id
     *
     * @param id new value of id
     */
    public void setId(String id) {
        this.id = id;
    }

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


}

Crear una Java Main Class...





Agregamos un ArrayList<Persona> , escribimos un segmento de código sin usar Lambda, donde usamos un for y una condición lógica para filtrar 
  for(Persona p:list){
                  if(p.getEdad() >=30 ){
                       System.out.println(" --> "+p.toString());
                  }
                 
              }
clic en el asistente y seleccionar Use functional Operation

el ide genera el código lambda
 list.stream().filter((p) -> (p.getEdad() >=30 )).forEach((p) -> {
                System.out.println(" --> "+p.toString());
            });

Se usa un stream() de la lista ,se aplica el filtro 


Código Completo

  package com.avbravo.testlambda;

import java.util.ArrayList;
import java.util.List;

/**
 *
 * @author avbravo
 */
public class Prueba {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
       try {
              List<Persona> list = new ArrayList<>();
              list.add(new Persona("1","anna",25));
              list.add(new Persona("2","jhoan",30));
              list.add(new Persona("3","maria",40));
              System.out.println(" sin utilizar lambda");
              for(Persona p:list){
                  if(p.getEdad() >=30 ){
                       System.out.println(" --> "+p.toString());
                  }
                 
              }
              System.out.println("lambda");
              list.stream().filter((p) -> (p.getEdad() >=30 )).forEach((p) -> {
                System.out.println(" --> "+p.toString());
            });
        } catch (Exception e) {
            System.out.println("Error "+e.getLocalizedMessage());
        }
      
    }

Ejecutamos el proyecto

    
}

No comments: