Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Referencia del Método | enum y API de Stream
Estructuras de Datos en Java

bookReferencia 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

main.java

copy
1234567891011
package 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

example.java

copy
1
(Class::Method)

Mejoremos el código anterior utilizando referencias a métodos:

main.java

main.java

copy
1234567891011
package 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.

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 4

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Awesome!

Completion rate improved to 4

bookReferencia 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

main.java

copy
1234567891011
package 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

example.java

copy
1
(Class::Method)

Mejoremos el código anterior utilizando referencias a métodos:

main.java

main.java

copy
1234567891011
package 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.

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 4. Capítulo 4
some-alt