Exemplos de utilização de lambdas expressions
Este post tem por objetivo mostrar alguns exemplos práticos de utilização de lambdas expressions do Java 8
Última atualização em: | 7511 Visualizações
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.
Não esqueca de deixar suas dúvidas nos comentários e compartilhar este post.