Referência de Método em Java
Antes de praticar com a Stream API, devemos explorar alguns atalhos para expressões lambda. Programadores se referem a esses "atalhos" como açúcar sintático.
Neste capítulo, discutiremos referências de métodos e como utilizá-las como substitutas para expressões lambda.
Referências de Métodos
Vamos analisar um exemplo simples de uma expressão lambda e tentar substituí-la por uma referência de 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)); } }
O uso de duas expressões lambda não é muito elegante, especialmente quando é possível simplificá-las para referências de método das classes onde estão declaradas.
A sintaxe será assim:
Example.java
1(Class::Method)
Vamos aprimorar o código acima utilizando referências de 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); } }
O método toUpperCase faz parte da classe String, portanto utilizamos a construção String::toUpperCase. Observe que, ao usar uma referência de método, a operação será aplicada a cada elemento, não sendo necessário utilizar 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.
Além disso, o próprio IntelliJ IDEA sugere constantemente a substituição de expressões lambda por referências de métodos quando essa operação é possível, então não é necessário memorizar a sintaxe toda vez.
Dessa forma, o IntelliJ IDEA irá sugerir melhorias no seu código utilizando referências de métodos.
Resumo
Em resumo, referências de métodos não adicionam nenhuma complexidade programática. Elas não otimizam o processo, mas também não o complicam. Essa construção serve apenas para reduzir um pouco o código escrito e melhorar a legibilidade. A escolha entre usar expressões lambda ou referências de métodos fica a seu critério. Por exemplo, considero mais claro escrever uma expressão lambda e, em seguida, o IntelliJ irá substituí-la automaticamente por uma referência de método.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Can you show more examples of method references?
What are the different types of method references in Java?
When should I use a method reference instead of a lambda expression?
Incrível!
Completion taxa melhorada para 4
Referência de Método em Java
Deslize para mostrar o menu
Antes de praticar com a Stream API, devemos explorar alguns atalhos para expressões lambda. Programadores se referem a esses "atalhos" como açúcar sintático.
Neste capítulo, discutiremos referências de métodos e como utilizá-las como substitutas para expressões lambda.
Referências de Métodos
Vamos analisar um exemplo simples de uma expressão lambda e tentar substituí-la por uma referência de 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)); } }
O uso de duas expressões lambda não é muito elegante, especialmente quando é possível simplificá-las para referências de método das classes onde estão declaradas.
A sintaxe será assim:
Example.java
1(Class::Method)
Vamos aprimorar o código acima utilizando referências de 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); } }
O método toUpperCase faz parte da classe String, portanto utilizamos a construção String::toUpperCase. Observe que, ao usar uma referência de método, a operação será aplicada a cada elemento, não sendo necessário utilizar 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.
Além disso, o próprio IntelliJ IDEA sugere constantemente a substituição de expressões lambda por referências de métodos quando essa operação é possível, então não é necessário memorizar a sintaxe toda vez.
Dessa forma, o IntelliJ IDEA irá sugerir melhorias no seu código utilizando referências de métodos.
Resumo
Em resumo, referências de métodos não adicionam nenhuma complexidade programática. Elas não otimizam o processo, mas também não o complicam. Essa construção serve apenas para reduzir um pouco o código escrito e melhorar a legibilidade. A escolha entre usar expressões lambda ou referências de métodos fica a seu critério. Por exemplo, considero mais claro escrever uma expressão lambda e, em seguida, o IntelliJ irá substituí-la automaticamente por uma referência de método.
Obrigado pelo seu feedback!