17 maio 2014

Novidades do Java 8 (lambdas)

Novidades de java 8 que escolhi abordar nesta palestra: Lambdas

Na palestra do CESAR EDU falei um pouco sobre as expressões lambdas. Fizemos uma discussão sobre as Expressões Lambda e os impactos da incorporação desta funcionalidade na linguagem, além das principais novidades do Java 8.







Abordagem tradicional:

import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class TestesJava7 {

 public static void main(String[] args) {

  List palavras = Arrays.asList("Olynto", "Denise", "Maria", "Douglas");

  Comparator comparator = new Comparator() {

   @Override
   public int compare(String o1, String o2) {
    // ordenacao por nome
    return o1.compareTo(o2);
   }
  };

  // ordenar a lista (Java 7)
  Collections.sort(palavras, comparator);

  System.out.println("Java 7\n");
  for (String value : palavras) {
   System.out.println(value);
  }
 } // fim main
 
} // fim classe


Abordagem com lambdas:

import java.time.LocalDate;
import java.time.Month;
import java.time.temporal.TemporalAdjusters;
import java.util.Arrays;
import java.util.Comparator;
import java.util.List;


public class TestesJava8 {

 public static void main(String[] args) {
  
  List palavras = Arrays.asList("Olynto", "Denise", "Maria", "Douglas");
  
  ordenaPalavras3(palavras);

  imprimirFormaTradicional(palavras);
  
  datas();
 }
 
 
 // forma Lambda 1 
 private static void ordenaPalavras1(List palavras) {
  
  Comparator comparator = (s1, s2) -> {
   return s1.compareTo(s2);
  };
  
  // usando o objeto List
  palavras.sort(comparator);
 }
 
 // forma Lambda 2
 private static void ordenaPalavras2(List palavras) {
  // Lambda 2 
  Comparator comparator = (s1, s2) -> s1.compareTo(s2);
  
  palavras.sort(comparator);
 }
 
 // forma Lambda 3 - direto ao ponto :)
 private static void ordenaPalavras3(List palavras) {
  palavras.sort((s1, s2) -> s1.compareTo(s2));
 }
 
 private static void imprimirFormaTradicional(List palavras) {
  
  // nao podem ser concorrentes automaticamente
  for (String value : palavras) {
   System.out.println(value);
  }
 
 }
 
 private static void imprimirFormaLambda(List palavras) {

  // podem ser
  palavras.forEach(s -> System.out.println(s));
 }

 
 
 private static void datas() {
  
  // Fluent
  LocalDate hoje = LocalDate.now();
  LocalDate diaPagamento = hoje.with(TemporalAdjusters.lastDayOfMonth()).minusDays(2);
  
  System.out.println("hoje -> "+hoje);
  System.out.println("dia pagamento -> "+diaPagamento);
  
  // Immutable
  LocalDate dateOfBirth = LocalDate.of(1977, Month.OCTOBER, 9);
  LocalDate firstBirthday = dateOfBirth.plusYears(4);
  
  System.out.println("dateOfBirth: "+dateOfBirth);
  System.out.println("firstBirthday: "+firstBirthday);
 }
}