O operador de seta -> em Java
- Como usar o operador Arrow em Java
- Operador de seta em coleções Java
- Operador de seta em Java Thread
Este tutorial apresenta o que o operador de seta (->
) faz em Java e também lista alguns códigos de exemplo para entender o tópico.
No Java 8, um novo recurso de expressão lambda foi adicionado e, ao mesmo tempo, o operador de seta passou a existir em Java, o qual é usado para formar a expressão lambda. Ele separa os argumentos do corpo da expressão.
(parameters) -> {
statements;
} // Lambda expression having arrow
A expressão lambda foi introduzida no Java 8 e pode ser usada no lugar da classe anônima no Java para tornar o código mais conciso e legível.
Abaixo está um exemplo de como criamos uma classe anônima em Java antes do Java 8.
Runnable r = new Runnable() {
@Override
public void run() {
System.out.print("Run method");
}
};
E é assim que podemos implementar a tarefa acima usando a expressão lambda em Java 8.
Runnable r = () -> System.out.print("Run method");
Vamos começar com alguns exemplos para entender o uso de operadores lambda e seta também.
Como usar o operador Arrow em Java
Neste exemplo, usamos o operador de seta para criar uma expressão lambda que implementa o método draw()
da interface Drawable
. Veja o exemplo abaixo.
interface Drawable {
public void draw();
}
public class Main {
public static void main(String[] args) {
int width = 20;
// arrow operator
Drawable d2 = () -> {
System.out.println("Drawing width: " + width);
};
d2.draw();
}
}
Produção:
Drawing width: 20
Como a expressão lambda é uma super maneira de criar código conciso com uma abordagem funcional, podemos usá-la de várias maneiras no código Java. Vamos ver alguns exemplos onde podemos aplicá-lo.
Operador de seta em coleções Java
Neste exemplo, filtramos os dados ArrayList usando uma expressão lambda. Usamos a API stream e o método filter()
para obter o resultado desejado. Você pode notar como é fácil criar código usando lambda em vez de código não lambda. Veja o exemplo abaixo.
package javaexample;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
class Product {
int id;
String name;
float price;
public Product(int id, String name, float price) {
this.id = id;
this.name = name;
this.price = price;
}
}
public class Main {
public static void main(String[] args) {
List<Product> list = new ArrayList<Product>();
list.add(new Product(1, "Samsung S5", 17000));
list.add(new Product(3, "Iphone 12", 100500));
list.add(new Product(2, "Sony Xperia", 25000));
// using arrow to filter data
Stream<Product> filtered_data = list.stream().filter(p -> p.price > 17000);
filtered_data.forEach(product -> System.out.println(product.name + ": " + product.price));
}
}
Produção:
Iphone 12: 100500.0
Sony Xperia: 25000.0
Operador de seta em Java Thread
Este é outro uso da expressão lambda, onde a usamos para implementar o método run()
da interface executável. Como Runnable é uma interface de método único, é fácil usar uma expressão lambda. Veja o exemplo abaixo.
package javaexample;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Stream;
public class Main {
public static void main(String[] args) {
// using arrow
Runnable r = () -> {
System.out.println("Thread is running...");
};
Thread t2 = new Thread(r);
t2.start();
}
}
Produção:
Thread is running...