Expressões Lambda e API Stream em Java

JavaBeginner
Pratique Agora

Introdução

Neste laboratório, você aprenderá como usar duas das características mais importantes do Java 8 - expressões lambda (Lambda expressions) e a API Stream (Stream API). Expressões lambda são usadas para criar funções anônimas que podem ser passadas como argumentos para outros métodos, enquanto a API Stream é usada para realizar uma sequência de operações em uma coleção.

Configurar o ambiente Java

Primeiramente, configure o ambiente Java instalando a versão mais recente do Java no seu sistema. Você pode baixar e instalar o Java do site oficial. Após a instalação, abra o terminal e verifique a versão do Java.

java -version

Criar um arquivo Java

Em seguida, crie um novo arquivo Java no seu diretório ~/project chamado LambdaExpressions.java.

touch ~/project/LambdaExpressions.java

Neste arquivo, escreveremos o código para implementar as expressões lambda (Lambda expressions) e a API Stream (Stream API).

Usar uma expressão Lambda para calcular a soma de dois números

Expressões lambda (Lambda expressions) fornecem uma maneira fácil de criar funções anônimas. Crie uma FunctionalInterface que representará uma função que recebe dois números como entrada e retorna sua soma.

interface Calculator {
  int sum(int a, int b);
}

Em seguida, podemos usar a expressão lambda para criar um objeto desta interface e, em seguida, chamar a função sum() usando esse objeto.

  Calculator adder = (a, b) -> a + b;
  int result = adder.sum(10, 20);
  System.out.println("Result: " + result);

Agora, compile e execute este código usando o seguinte comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

A saída deve ser:

Result: 30

Iterar sobre uma coleção usando a API Stream

A API Stream (Stream API) é usada para realizar uma sequência de operações em uma coleção. Nesta etapa, aprenderemos como iterar sobre uma coleção de strings e filtrar as strings que começam com "A".

Crie uma lista de strings contendo alguns nomes para trabalhar.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave", "Andy");

Em seguida, use a API Stream para iterar sobre esta coleção, filtrar as strings que começam com "A" e imprimir as restantes no console.

  names.stream().filter(s -> s.startsWith("A")).forEach(System.out::println);

Agora, compile e execute este código usando o seguinte comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

A saída deve ser:

Alice
Andy

Usar a API Stream para encontrar o máximo e o mínimo de uma lista de inteiros

A API Stream (Stream API) fornece uma maneira de realizar uma sequência de operações em uma coleção. Nesta etapa, aprenderemos como usar a API Stream para encontrar os elementos máximo e mínimo de uma lista de inteiros.

Crie uma lista de inteiros

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Encontre o elemento máximo da lista usando a API Stream.

Optional<Integer> maxNum = numbers.stream().max(Integer::compareTo);
System.out.println("Maximum number: " + maxNum.get());

Encontre o elemento mínimo da lista usando a API Stream.

Optional<Integer> minNum = numbers.stream().min(Integer::compareTo);
System.out.println("Minimum number: " + minNum.get());

Agora, compile e execute este código usando o seguinte comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

A saída deve ser:

Maximum number: 30
Minimum number: 2

Usar forEach() para imprimir os elementos de uma lista

Podemos usar o método forEach() da API Stream (Stream API) para iterar sobre uma lista e realizar uma ação em cada elemento.

Crie uma lista de strings contendo alguns nomes para trabalhar.

List<String> names = Arrays.asList("Alice", "Bob", "Charlie", "Dave");

Imprima todos os elementos da lista usando o método forEach().

names.stream().forEach(System.out::println);

Agora, compile e execute este código usando o seguinte comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

A saída deve ser:

Alice
Bob
Charlie
Dave

Usar a API Stream para ordenar uma Collection

A API Stream (Stream API) pode ser usada para ordenar uma coleção. Nesta etapa, aprenderemos como ordenar uma lista de inteiros em ordem crescente.

Crie uma lista de inteiros para trabalhar.

List<Integer> numbers = Arrays.asList(1, 3, 2, 4, 5);

Ordene a lista em ordem crescente usando o método sorted() da API Stream.

numbers.stream().sorted().forEach(System.out::println);

Agora, compile e execute este código usando o seguinte comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

A saída deve ser:

1
2
3
4
5

Usar a API Stream para filtrar e ordenar uma coleção

Nesta etapa, usaremos a API Stream (Stream API) para filtrar e ordenar uma coleção de inteiros.

Crie uma lista de inteiros para trabalhar.

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Filtre apenas os números pares e ordene-os em ordem decrescente usando o método sorted().

numbers.stream().filter(n -> n % 2 == 0).sorted(Comparator.reverseOrder()).forEach(System.out::println);

Agora, compile e execute este código usando o seguinte comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

A saída deve ser:

30
20
10
4
2

Usar a API Stream para obter a média de uma coleção

Nesta etapa, aprenderemos como usar a API Stream (Stream API) para obter a média de uma coleção de inteiros.

Crie uma lista de inteiros para trabalhar.

List<Integer> numbers = Arrays.asList(10, 2, 30, 5, 4, 20);

Use o método average() da API Stream para obter a média da lista.

OptionalDouble avg = numbers.stream().mapToInt(Integer::intValue).average();
System.out.println("Average: " + avg.getAsDouble());

Agora, compile e execute este código usando o seguinte comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

A saída deve ser:

Average: 12.0

Criar um objeto Optional e verificar se está vazio ou não

Nesta etapa, aprenderemos o que é Optional e como criar um objeto Optional.

Crie um objeto Optional de uma string vazia.

Optional<String> emptyString = Optional.empty();

Verifique se este objeto está vazio usando o método isPresent().

if(emptyString.isPresent()) {
    System.out.println(emptyString.get());
}
else {
    System.out.println("No value");
}

Agora, compile e execute este código usando o seguinte comando:

javac ~/project/LambdaExpressions.java && java LambdaExpressions

A saída deve ser:

No value

Resumo

Neste laboratório, aprendemos a usar duas das funcionalidades mais importantes do Java 8 - expressões Lambda (Lambda expressions) e a API Stream (Stream API). Aprendemos como usar expressões Lambda para criar funções anônimas, como usar a API Stream para realizar uma sequência de operações em uma coleção, e como criar objetos Optional e verificar se estão vazios ou não. Também vimos como usar a API Stream para ordenar, filtrar e obter a média de uma coleção. Ao dominar essas funcionalidades, podemos escrever código eficiente e limpo usando Java 8.