domingo, 28 de abril de 2013

Expression Language 3.0 en Java EE 7. Segunda Parte

2.- Expresiones Lambda
     Las expresiones lambda de EL 3.0 son más simples que en JDK 8 pero tendrán compatibilidad entre ambas.
Algunos ejemplos:
${((x,y) -> x + y )(5,9)}  , que imprime 14
${(()->100)()}, que imprime 100
${incrementaEnUno = x->x+1; incrementaEnUno(100)} , que imprime 101

Si deseas conocer a detalle los tipos de expresiones, ve a la sección 1.20 de la especificación.

3.- Operaciones a Colecciones
     Los tipos de coleccones soportados son Set, List y Map.
     Para construir un Set:
     ${{"uno", "dos", "tres"}}
     List:
${["uno", "dos", "tres"]}    , con corchetes en vez de llaves.
     Map:
  ${{"uno": 1, "dos": 2, "tres": 3}} , como en JSON.

    Una vez construida la colección se pueden hacer operaciones sobre ella, y con ayuda de expresiones lambda, como por ejemplo:

${["uno","dos","tres","cuatro"].stream().filter(i -> i != "cuatro").toList()}

que regresa ["uno,""dos","tres"]. Nótese que la lista se convierte a stream primero, y después se le aplica la función filter(), y al final el resultado se convierte a lista de nuevo, con la función toList().
El capítulo 2 de la especificación esta dedicado a las colleciones. Hay muchas más operaciones para trabajar con colecciones.

Nota: Los ejemplos de colecciones sólo conseguí correrlos en un JSP, no así en un JSF. En JSF obtuve errores de compilación.

4.- Una API para EL en modo stand-alone
     Puedes correr expresiones EL en un archivo Java sin ser precisamente orientado a web (JSP, JSF). Se importa la la clase javax.el.ELProcessor y se ejecuta de esta manera, por ejemplo:

ELProcessor el = new ELProcessor();
        Object result = el.eval("'Java Rocks' += 100");
        System.out.println(result);

ELProcessor cuenta con muchas más funciones, como, por ejemplo definir un bean y utilizarlo dentro del ambiente EL.
Detalles de este API se encuentran no en la especificación pero si en el javadoc que viene con la especificación.








     

1 comentario: