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.
Interesante!
ResponderBorrar