Contenido de certificación
Buscar
Social
Ofertas laborales ES
« ¿Error en la utilidad References de Eclipse utilizando implementaciones e interfaces? | Main | Definición de métodos »
miércoles
abr082015

Lambda Quick Start

Buenos días, dejamos un código explicativo sobre Lambda, nueva característica de Java 8.

001.package lambda;
002. 
003.import java.awt.event.ActionEvent;
004.import java.awt.event.ActionListener;
005.import java.util.ArrayList;
006.import java.util.Collections;
007.import java.util.Comparator;
008.import java.util.List;
009.import javax.swing.JButton;
010. 
011./**
012. * Clase que utilizaremos en la parte de métodos de comparación con Lambda
013. *
014. * @author jaimecl
015. *
016. */
017.public class Persona {
018. 
019.    private String surName;
020. 
021.    public Persona(String surName) {
022.        super();
023.        this.surName = surName;
024.    }
025. 
026.    public String getSurName() {
027.        return surName;
028.    }
029. 
030.    public void setSurName(String surName) {
031.        this.surName = surName;
032.    }
033. 
034.    /* Método de impresión de valores */
035.    public void printName() {
036.        System.out.println("surName=" + surName + "]");
037.    }
038. 
039.    /* Método que creará una lista corta de Personas, a modo de datos de ejemplo */
040.    private static List<persona> createShortList() {
041.        ArrayList<persona> lista = new ArrayList<persona>();
042.        lista.add(new Persona("Carmona"));
043.        lista.add(new Persona("Pérez"));
044.        return lista;
045. 
046.    }
047. 
048.    /**
049.     * Método principal
050.     *
051.     * @param args
052.     */
053.    public static void main(String args) {
054. 
055.        /*
056.         * Empezamos con clases anónimas: utilizadas en un sólo punto del código
057.         * No hay necesidad de tener que definir una clase única que sea
058.         * referenciada sólo una vez
059.         */
060.        JButton testButton = new JButton("Test Button");
061.        testButton.addActionListener(new ActionListener() {
062.            public void actionPerformed(ActionEvent ae) {
063.                System.out.println("Click Detected by Anon Class");
064.            }
065.        });
066. 
067.        /*
068.         * Java8 define como interfaz funcional aquella clase que define un sólo
069.         * método. Las expresiones Lambda pueden ser aplicadas sobre dichas
070.         * interfaces La sintaxis es la siguiente argumento -> cuerpo. (int x,
071.         * int y) -> x + y
072.         *
073.         * () -> 42
074.         *
075.         * (String s) -> { System.out.println(s); }
076.         */
077. 
078.        /* A continuación, vemos cómo definir Lambda Runnable */
079. 
080.        /* Manera antigua, con una clase anónima */
081.        new Runnable() {
082.            @Override
083.            public void run() {
084.                System.out.println("JavaHispaneros, ¡manera anónima!");
085.            }
086.        }.run();
087. 
088.        // Con Lambda, la interfaz runnable tiene un sólo método, por lo tanto,
089.        // podemos redefinirlo de la siguiente manera.
090.        Runnable r2 = () -> System.out
091.                .println("JavaHispaneros, ¡esto es Lambda!");
092. 
093.        /* A continuación, vemos un ejemplo de ordenación de listas */
094.        List<persona> personList = Persona.createShortList();
095. 
096.        /*
097.         * Ordenación con clases anónimas. Dentro del método sort, que espera
098.         * una interfaz de tipo Comparator, hacemos una redefinición
099.         */
100. 
101.        Collections.sort(personList, new Comparator<persona>() {
102.            public int compare(Persona p1, Persona p2) {
103.                return p1.getSurName().compareTo(p2.getSurName());
104.            }
105.        });
106. 
107.        // Ordenación ascendente, en este caso, haciendo uso de expresiones
108.        // lambda
109. 
110.        /*
111.         * El método sort de Collections espera un único método, con dos
112.         * parámetros. Por lo tanto, utilizamos la sintaxis lambda para definir
113.         * el método de comparación
114.         */
115.        Collections.sort(personList, (Persona p1, Persona p2) -> p1
116.                .getSurName().compareTo(p2.getSurName()));
117. 
118.        // Mismo caso, ejerciendo la ordenación descendente.
119.        Collections.sort(personList,
120.                (p1, p2) -> p2.getSurName().compareTo(p1.getSurName()));
121. 
122.        /* Otro caso para listeners */
123.        JButton botonMetodoAnonimo = new JButton("Botón con método anónimo");
124.        botonMetodoAnonimo.addActionListener(new ActionListener() {
125.            @Override
126.            public void actionPerformed(ActionEvent ae) {
127.                System.out.println("Click detectado por clase anónima");
128.            }
129.        });
130. 
131.        /*
132.         * De nuevo, vemos que addActionListener acepta una clase que implemente
133.         * la interfaz listener, que define un método único, por lo tanto,
134.         * acepta expresiones lambda Recordamos la sintaxis: nombre de variable
135.         * en parámetro -> acción a realizar Choca ver que en la parte de
136.         * parámetros no existe el tipo de parámetro que es
137.         */
138. 
139.        JButton botonMetodoLambda = new JButton("Botón con método lambda");
140.        botonMetodoLambda.addActionListener(e -> System.out
141.                .println("Click Detected by Lambda Listner"));
142. 
143.    }
144.}
145. 
146. 
147.</persona></persona></persona></persona></persona>

Reader Comments

There are no comments for this journal entry. To create a new comment, use the form below.

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>