Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Referência do Método | enum e Stream API
Estruturas de Dados em Java

bookReferência do Método

Antes de mergulhar na prática com a Stream API, devemos explorar alguns atalhos para expressões lambda. Os programadores se referem a esses “atalhos” como açúcar sintático.

Neste capítulo, discutiremos referências de métodos e como usá-las como substitutos para expressões lambda.

Referências a Métodos

Vamos examinar um exemplo simples de uma expressão lambda e tentar substituí-la por uma referência a 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)); } }

Utilizar duas expressões lambda não parece muito elegante, especialmente quando podemos simplificá-las para referências de métodos das classes onde são declaradas.

A sintaxe será assim:

example.java

example.java

copy
1
(Class::Method)

Vamos aprimorar o código acima utilizando referências de 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); } }

O método toUpperCase faz parte da classe String, então usamos a construção String::toUpperCase. Observe que, ao usar uma referência de método, a operação será aplicada a cada elemento, então não há necessidade de usar uma expressão lambda para isso. Também substituímos a impressão na tela por System.out::print, que também é uma referência de método. O programa aplicará o método System.out.print() a cada elemento.

Aliás, o próprio IntelliJ IDEA constantemente sugere a substituição de expressões lambda por referências de método se tal operação for possível, então você não precisa memorizar a sintaxe toda vez.

Dessa forma, o próprio IntelliJ IDEA irá sugerir melhorias no seu código usando referências de métodos.

Resumo

Em resumo, referências de métodos não adicionam nenhuma carga programática. Elas não otimizam o processo, mas também não o complicam. Esta construção é simplesmente para reduzir levemente o código escrito e melhorar a legibilidade. Usar expressões lambda ou referências de métodos fica a seu critério. Por exemplo, acho mais claro escrever uma expressão lambda e depois o IntelliJ irá automaticamente substituí-la por uma referência de método.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 4

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 4

bookReferência do Método

Deslize para mostrar o menu

Antes de mergulhar na prática com a Stream API, devemos explorar alguns atalhos para expressões lambda. Os programadores se referem a esses “atalhos” como açúcar sintático.

Neste capítulo, discutiremos referências de métodos e como usá-las como substitutos para expressões lambda.

Referências a Métodos

Vamos examinar um exemplo simples de uma expressão lambda e tentar substituí-la por uma referência a 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)); } }

Utilizar duas expressões lambda não parece muito elegante, especialmente quando podemos simplificá-las para referências de métodos das classes onde são declaradas.

A sintaxe será assim:

example.java

example.java

copy
1
(Class::Method)

Vamos aprimorar o código acima utilizando referências de 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); } }

O método toUpperCase faz parte da classe String, então usamos a construção String::toUpperCase. Observe que, ao usar uma referência de método, a operação será aplicada a cada elemento, então não há necessidade de usar uma expressão lambda para isso. Também substituímos a impressão na tela por System.out::print, que também é uma referência de método. O programa aplicará o método System.out.print() a cada elemento.

Aliás, o próprio IntelliJ IDEA constantemente sugere a substituição de expressões lambda por referências de método se tal operação for possível, então você não precisa memorizar a sintaxe toda vez.

Dessa forma, o próprio IntelliJ IDEA irá sugerir melhorias no seu código usando referências de métodos.

Resumo

Em resumo, referências de métodos não adicionam nenhuma carga programática. Elas não otimizam o processo, mas também não o complicam. Esta construção é simplesmente para reduzir levemente o código escrito e melhorar a legibilidade. Usar expressões lambda ou referências de métodos fica a seu critério. Por exemplo, acho mais claro escrever uma expressão lambda e depois o IntelliJ irá automaticamente substituí-la por uma referência de método.

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 4. Capítulo 4
some-alt