O operador de seta -> em Java

Mohammad Irfan 12 outubro 2023
  1. Como usar o operador Arrow em Java
  2. Operador de seta em coleções Java
  3. Operador de seta em Java Thread
O operador de seta -> em Java

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...

Artigo relacionado - Java Operator