Exemplos de utilização de lambdas expressions

Postado em por Wolmir Cezer Garbin em Java | 144 Visualizações
Última atualização em:

Este post tem por objetivo mostrar alguns exemplos práticos de utilização de lambdas expressions do Java 8

Exemplos de utilização de lambdas expressions

O java 8, após um bom tempo sem muitas mudanças trouxe várias novidades para os programadores, veja neste post alguns exemplos de códigos que demonstram alguns recursos do lambdas do Java 8.

Utilizando .filter e .map

Este exemplo como através da utilização da classe Stream e lambdas expressions ficou simples para fazer operaççoes de filtro e mapeamento de valores.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Exercicio01 {

    public static void main(String args[]){
        List<String> languages = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");

        // filtrar todos os nomes que iniciam com J
        languages.stream().filter(l -> l.toUpperCase().startsWith("J")).forEach(System.out::print);

        // filtrar todos os nomes que possuem mais de 5 caracteres
        languages.stream().filter(l -> l.length() > 5).forEach(System.out::print);

        // Transformar esta lista em uma lista de inteiros contendo o tamanho de cada palavra e imprimir
        List<Integer> collect = languages.stream().map(l -> l.length()).collect(Collectors.toList());

        collect.forEach(System.out::print);
    }
}

Exemplo de conversão de for tradicional para forEach do java 8

Estes exemplos mostram como é possível reescrever códigos de maneira muito mais simples com a utilização de lambdas expressions.

import java.util.Arrays;
import java.util.List;

public class Exercicio02 {

    public static void main(String[] args) {
        List<Integer> costBeforeTax = Arrays.asList(100, 200, 300, 400, 500);

        /*for (Integer cost : costBeforeTax) {
            double price = cost + .12*cost;
            System.out.println(price);
        }*/

        // reescrever usando lambdas
        costBeforeTax.forEach(cost -> System.out.println( cost + .12*cost ));
    }
}

Utilizando forEach com objetos.

import java.util.Arrays;
import java.util.List;

public class Exercicio03 {

    public static void main(String[] args) {
        List<Pessoa> costBeforeTax = Arrays.asList(new Pessoa("João", 2531.0), new Pessoa("José", 1600.0), new Pessoa("Nicolas", 2810.0));

        /*for (Pessoa p : costBeforeTax) {
            double inss = p.salario * 5 / 100;
            System.out.println( inss );
        }*/

        // reescrever usando lambdas
        costBeforeTax.forEach( p -> System.out.println( p.salario * 5 / 100 ) );
    }
}

class Pessoa {
    String nome;
    Double salario;

    public Pessoa(String nome, Double salario) {
        this.nome = nome;
        this.salario = salario;
    }
}

Filtro com a utilização da classe stream

Este exemplo mostra de maneira simples como filtrar listas com a utilização da classe Stream.

import java.util.Arrays;
import java.util.List;

public class Exercicio04 {

    public static void main(String[] args) {
        List<Usuario> usuarios = Arrays.asList(
                new Usuario("maikon", false),
                new Usuario("jose", false),
                new Usuario("paulo", true),
                new Usuario("ronaldo", true));

        // Criar uma nova lista de usuários ativos e imprimir usando java 8 e forEach
        usuarios.stream()
                .filter(usuario -> usuario.ativo)
                .forEach( u -> System.out.println(u.usuario) );
    }
}

class Usuario {
    String usuario;
    Boolean ativo;

    public Usuario(String usuario, Boolean ativo) {
        this.usuario = usuario;
        this.ativo = ativo;
    }
}

Utilizando .map para transformar elementos de uma lista

O map permite criar novas listas mapeando valores de uma coleção para transformar e obter novos resultados.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Exercicio05 {

    public static void main(String[] args) {
        List<String> G7 = Arrays.asList("USA", "Japan", "France", "Germany", "Italy", "U.K.","Canada");

        // transformar todos os paises para letras maiusculas e concatenar em uma string utilizando join por , com java 8
        List<String> maiuscula = G7.stream()
                .map(a -> a.toUpperCase())
                .collect(Collectors.toList());

        System.out.println( String.join(",", maiuscula) );
    }
}

Exemplo de utilização do map para multiplicar valores de uma collection para obter uma nova lista com os valores do calculo.

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Exercicio06 {

    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(9, 10, 3, 4, 7, 3, 4);

        // multiplicar todos os números em por eles mesmos e criar uma nova lista com o resultado da multiplicação.
        // ao final imprimir usando java 8
        List<Integer> collect = numbers.stream()
                .map(n -> n * n)
                .collect(Collectors.toList());

        collect.forEach(System.out::println);
    }
}

Obter dados estatísticos a partir de uma coleção

Usando a classe IntSummaryStatistics podemos obter alguns valores a partir de uma lista de dados, para este exemplo foi utilizado uma classe lista com números inteiros.

import java.util.Arrays;
import java.util.IntSummaryStatistics;
import java.util.List;

public class Exercicio07 {

    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(2, 3, 5, 7, 11, 13, 17, 19, 23, 29);

        // Usando java 8 retire estatisticas da lista como maximo, minimo, soma e média
        IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics();

        System.out.println( stats.getMax() );
        System.out.println( stats.getMin() );
        System.out.println( stats.getSum() );
        System.out.println( stats.getAverage() );
        System.out.println( stats.getCount() );
    }
}

Não deixe de ver este outro post onde é mostrado como fazer Ordenação de listas com Java 8 e Lambdas Expression.

Caso tenham dúvidas deixem nos comentários.

Wolmir Cezer Garbin

Wolmir Cezer Garbin


Sou formado em Desenvolvimento de Sistemas para Internet pela faculdade Mater Dei e Pós graduado em Desenvolvimento de sistemas em Java pela UTFPR. Trabalho a mais de 9 anos com desenvolvimento em Java, Android e Web utilizando as principais tecnologias do mercado. Atuo como professor na faculdade Mater Dei, programador na Garbo Software e criador do Receitas de Código.

Ver mais

Posts relacionados


Code Conference

Esta é uma conferência de código realizada na cidade de Pato Branco para dissiminar tendências e informações sobre programação e novas tecnológias

Veja mais sobre o Code Conference

Publique seu post no Receitas de Código

Agora você pode publicar seu post no Receitas de Código e compartilhar seu conhecimento com muitas pessoas!

Quero publicar