Referencia del Método
Antes de sumergirnos en la práctica con la API Stream, deberíamos explorar algunos acortamientos para expresiones lambda. Los programadores se refieren a estos "acortamientos" como azúcar sintáctico.
En este capítulo hablaremos de las referencias a métodos y de cómo utilizarlas como sustitutos de las expresiones lambda.
Referencias de métodos
Veamos un ejemplo sencillo de una expresión lambda e intentemos sustituirla por una referencia a un método:
main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(e -> e.toUpperCase()).forEach(e -> System.out.print(e)); } }
Usar dos expresiones lambda no parece muy elegante, especialmente cuando podemos acortarlas a referencias a métodos de las clases donde están declaradas.
La sintaxis se verá así:
example.java
1(Class::Method)
Mejoremos el código anterior utilizando referencias a métodos:
main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(String::toUpperCase).forEach(System.out::print); } }
El método toUpperCase
es parte de la clase String
, así que usamos la construcción String::toUpperCase
. Ten en cuenta que al utilizar una referencia a un método, la operación se aplicará a cada elemento, por lo que no es necesario utilizar una expresión lambda para esto. También hemos sustituido la impresión en pantalla por System.out::print
, que también es un método de referencia. El programa aplicará el método System.out.print()
a cada elemento.
Por cierto, el propio IntelliJ IDEA sugiere constantemente sustituir las expresiones lambda por referencias a métodos si tal operación es posible, para no tener que memorizar la sintaxis cada vez:
De esta forma, el propio IntelliJ IDEA sugerirá mejorar tu código utilizando referencias a métodos.
Resumen
En resumen, las referencias a métodos no añaden ninguna carga programática. No optimizan el proceso pero tampoco lo complican. Esta construcción es simplemente para reducir ligeramente el código escrito y mejorar la legibilidad. Usar expresiones lambda o referencias a métodos es depende de ti. Por ejemplo, a mí me parece más claro escribir una expresión lambda, y entonces IntelliJ la reemplazará automáticamente por una referencia a un método.
¡Gracias por tus comentarios!
Pregunte a AI
Pregunte a AI
Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla
Awesome!
Completion rate improved to 4
Referencia del Método
Desliza para mostrar el menú
Antes de sumergirnos en la práctica con la API Stream, deberíamos explorar algunos acortamientos para expresiones lambda. Los programadores se refieren a estos "acortamientos" como azúcar sintáctico.
En este capítulo hablaremos de las referencias a métodos y de cómo utilizarlas como sustitutos de las expresiones lambda.
Referencias de métodos
Veamos un ejemplo sencillo de una expresión lambda e intentemos sustituirla por una referencia a un método:
main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(e -> e.toUpperCase()).forEach(e -> System.out.print(e)); } }
Usar dos expresiones lambda no parece muy elegante, especialmente cuando podemos acortarlas a referencias a métodos de las clases donde están declaradas.
La sintaxis se verá así:
example.java
1(Class::Method)
Mejoremos el código anterior utilizando referencias a métodos:
main.java
1234567891011package com.example; import java.util.Arrays; import java.util.List; public class Main { public static void main(String[] args) { List<String> example = Arrays.asList("c", "o", "d", "e", "f", "i", "n", "i", "t", "y"); example.stream().map(String::toUpperCase).forEach(System.out::print); } }
El método toUpperCase
es parte de la clase String
, así que usamos la construcción String::toUpperCase
. Ten en cuenta que al utilizar una referencia a un método, la operación se aplicará a cada elemento, por lo que no es necesario utilizar una expresión lambda para esto. También hemos sustituido la impresión en pantalla por System.out::print
, que también es un método de referencia. El programa aplicará el método System.out.print()
a cada elemento.
Por cierto, el propio IntelliJ IDEA sugiere constantemente sustituir las expresiones lambda por referencias a métodos si tal operación es posible, para no tener que memorizar la sintaxis cada vez:
De esta forma, el propio IntelliJ IDEA sugerirá mejorar tu código utilizando referencias a métodos.
Resumen
En resumen, las referencias a métodos no añaden ninguna carga programática. No optimizan el proceso pero tampoco lo complican. Esta construcción es simplemente para reducir ligeramente el código escrito y mejorar la legibilidad. Usar expresiones lambda o referencias a métodos es depende de ti. Por ejemplo, a mí me parece más claro escribir una expresión lambda, y entonces IntelliJ la reemplazará automáticamente por una referencia a un método.
¡Gracias por tus comentarios!