SlideShare uma empresa Scribd logo
1 de 31
Baixar para ler offline
Globalcode	
  –	
  Open4education
Java 8
Afinal onde usamos no dia a dia?
Frederico Maia Arantes
Desenvolvedor de Sofware / Instrutor
Globalcode	
  –	
  Open4education
Sobre mim
  Frederico Maia Arantes
 Goiano, atualmente no Rio de Janeiro
 +7 anos de experiência em desenvolvimento
 Desenvolvedor de software no LIP da TecSinapse
 Instrutor de cursos Java na Caelum
 Estudante - MBA em Engenharia de Software na UFRJ
Globalcode	
  –	
  Open4education
Sobre a palestra
  Default Methods
  Lambdas Expressions
  Functional Interfaces
  Streams
  Collectors
Globalcode	
  –	
  Open4education
Classe ‘Ingresso’
public	
  class	
  Ingresso	
  {	
  
	
  	
  	
  	
  private	
  String	
  nomeEvento;	
  
	
  	
  	
  	
  private	
  double	
  valor;	
  
	
  	
  	
  	
  public	
  Ingresso(String	
  nomeEvento,	
  double	
  valor)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.nomeEvento	
  =	
  nomeEvento;	
  
	
  	
  	
  	
  	
  	
  	
  	
  this.valor	
  =	
  valor;	
  
	
  	
  	
  	
  }	
  
	
  	
  	
  	
  //getters	
  e	
  setters	
  
	
  	
  	
  	
  //toString()	
  
} 	
  	
  
Globalcode	
  –	
  Open4education
Loop tradicional
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  for(Ingresso	
  ingresso	
  :	
  ingressos)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  System.out.println(ingresso);	
  
	
  	
  	
  	
  }	
  
}	
  
Globalcode	
  –	
  Open4education
Novo loop com forEach
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  ingressos.forEach(consumer);	
  //recebe	
  um	
  Consumer	
  
	
  
	
  	
  	
  	
  //Consumer	
  é	
  uma	
  nova	
  interface	
  do	
  Java	
  8	
  com	
  um	
  único	
  método	
  
}	
  
Globalcode	
  –	
  Open4education
Novo loop com forEach
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  Consumer<Ingresso>	
  consumer	
  =	
  new	
  Consumer<Ingresso>()	
  {	
  
	
  	
  	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  	
  	
  public	
  void	
  accept(Ingresso	
  ingresso)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  System.out.println(ingresso);	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  };	
  
	
  	
  	
  	
  ingressos.forEach(consumer);	
  //recebe	
  um	
  Consumer	
  
}	
  
Globalcode	
  –	
  Open4education
Novo loop com forEach
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  ingressos.forEach(new	
  Consumer<Ingresso>()	
  {	
  
	
  	
  	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  	
  	
  public	
  void	
  accept(Ingresso	
  ingresso)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  System.out.println(ingresso);	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  });	
  
}	
  
Globalcode	
  –	
  Open4education
Remover ingressos caros
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  new	
  ArrayList<>();	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  1",	
  100.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  2",	
  150.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  3",	
  180.0));	
  	
  
	
  
	
  	
  	
  	
  ingressos.removeIf(new	
  Predicate<Ingresso>()	
  {	
  
	
  	
  	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  	
  	
  public	
  boolean	
  test(Ingresso	
  ingresso)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  return	
  ingresso.getValor()	
  >	
  100;	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  });	
  
}	
  
Globalcode	
  –	
  Open4education
Default methods
Novos métodos, com implementação, adicionados às
interfaces Java, como em Collections e Map.
Veja por exemplo o forEach:
	
  
default	
  void	
  forEach(Consumer<?	
  super	
  T>	
  action)	
  {	
  
	
  	
  	
  	
  Objects.requireNonNull(action);	
  
	
  	
  	
  	
  for	
  (T	
  t	
  :	
  this)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  action.accept(t);	
  
	
  	
  	
  	
  }	
  
}	
  
	
  
Outros: removeIf, sort, compare, computeIfPresente.
Você pode criar default methods em suas interfaces.
Globalcode	
  –	
  Open4education
Legais os Default Methods!
Mas agora preciso escrever mais código que antes,
pra fazer a mesma coisa.
Globalcode	
  –	
  Open4education
Lambdas
  O que são?
  De onde vem?
  De que se alimentam?
“Simplificando bastante, um lambda no Java é uma maneira
mais simples de implementar uma interface que tem um
único método.”
Globalcode	
  –	
  Open4education
Lambdas
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  	
  
	
  
	
  	
  	
  	
  ingressos.forEach(new	
  Consumer<Ingresso>()	
  {	
  
	
  	
  	
  	
  	
  	
  @Override	
  
	
  	
  	
  	
  	
  	
  public	
  void	
  accept(Ingresso	
  ingresso)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  System.out.println(ingresso);	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  });	
  
}
Globalcode	
  –	
  Open4education
Lambdas
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  	
  
	
  
	
  	
  	
  	
  ingressos.forEach(new	
  Consumer<Ingresso>()	
  {	
  
	
  
	
  	
  	
  	
  	
  	
  public	
  void	
  accept(Ingresso	
  ingresso)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  System.out.println(ingresso);	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  });	
  
}
Globalcode	
  –	
  Open4education
Lambdas
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  	
  
	
  
	
  	
  	
  	
  ingressos.forEach(	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  {	
  
	
  
	
  	
  	
  	
  	
  	
  public	
  void	
  accept(Ingresso	
  ingresso)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  System.out.println(ingresso);	
  
	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  });	
  
}
Globalcode	
  –	
  Open4education
Lambdas
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  	
  
	
  
	
  	
  	
  	
  ingressos.forEach(	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  (Ingresso	
  ingresso)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  System.out.println(ingresso);	
  
	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  });	
  
}
Globalcode	
  –	
  Open4education
Lambdas
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  	
  
	
  
	
  	
  	
  	
  ingressos.forEach(	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  (Ingresso	
  ingresso)	
  -­‐>	
  {	
  System.out.println(ingresso)	
  }	
  
	
  	
  	
  	
  );	
  
}
Globalcode	
  –	
  Open4education
Lambdas
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  	
  
	
  
	
  	
  	
  	
  ingressos.forEach(	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  
	
  	
  	
  	
  	
  	
  	
  ingresso	
  -­‐>	
  {	
  System.out.println(ingresso)	
  }	
  
	
  	
  	
  	
  );	
  
}
Globalcode	
  –	
  Open4education
Lambdas
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  Arrays.asList(	
  
	
  new	
  Ingresso("Festa	
  1",	
  100.0),	
  	
  
	
  new	
  Ingresso("Festa	
  2",	
  150.0),	
  
	
  new	
  Ingresso("Festa	
  3",	
  200.0));	
  
	
  
	
  	
  	
  	
  	
  
	
  
	
  	
  	
  	
  ingressos.forEach(ingresso	
  -­‐>	
  System.out.println(ingresso));	
  
}
Globalcode	
  –	
  Open4education
Functional Interfaces
  Interfaces com um único método abstrato. Este é um
requisito obrigatório.
  Exemplo: Consumer. Assim no forEach o compilador sabe
o método que deverá ser implementado no lambda.
  Funciona só em interfaces novas do Java 8? Não.
  Para as novas, e as suas implementações, temos a
anotação opcional @FunctionalInterface.
Globalcode	
  –	
  Open4education
Functional Interfaces
button.addActionListener(new	
  ActionListener()	
  {	
  
	
  	
  	
  @Override	
  
	
  	
  	
  public	
  void	
  actionPerformed(ActionEvent	
  e){	
  	
  	
  
	
  	
  	
  	
  	
  System.out.println("clik!");	
  	
  
	
  	
  	
  }	
  	
  
});
//Com	
  Lambda	
  
button.addActionListener(e	
  -­‐>	
  System.out.println("click!"));	
  	
  
Globalcode	
  –	
  Open4education
Streams
  Trabalhar com coleções sempre envolve muito código.
  Em muitas linguagens temos por exemplo um ‘filter’ pra
facilitar nossa vida.
  Forma mais funcional de lidar com coleções.
Globalcode	
  –	
  Open4education
Filtrar da forma tradicional
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  new	
  ArrayList<>();	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  1",	
  100.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  2",	
  150.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  3",	
  180.0));	
  
	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressosBaratos	
  =	
  new	
  ArrayList<>();	
  
	
  	
  	
  	
  for(Ingresso	
  ingresso	
  :	
  ingressos)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  if(ingresso.getValor()	
  <	
  120)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  ingressosBaratos.add(ingresso);	
  
	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
}	
  
Globalcode	
  –	
  Open4education
Filtrar com Stream
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  new	
  ArrayList<>();	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  1",	
  100.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  2",	
  150.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  3",	
  180.0));	
  	
  
	
  
	
  	
  	
  	
  Stream<Ingresso>	
  stream	
  =	
  ingressos.stream();	
  	
  
}	
  
Globalcode	
  –	
  Open4education
Filtrar com Stream
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  new	
  ArrayList<>();	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  1",	
  100.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  2",	
  150.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  3",	
  180.0));	
  	
  
	
  
	
  	
  	
  	
  Stream<Ingresso>	
  stream	
  =	
  ingressos.stream();	
  	
  
	
  	
  	
  	
  stream.filter(	
  i	
  -­‐>	
  i.getValor()	
  <	
  120	
  );	
  
}	
  
Globalcode	
  –	
  Open4education
Filtrar com Stream
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  new	
  ArrayList<>();	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  1",	
  100.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  2",	
  150.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  3",	
  180.0));	
  	
  
	
  
	
  	
  	
  	
  ingressos.stream().filter(	
  i	
  -­‐>	
  i.getValor()	
  <	
  120	
  );	
  
}	
  
Globalcode	
  –	
  Open4education
Filtrar com Stream
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  new	
  ArrayList<>();	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  1",	
  100.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  2",	
  150.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  3",	
  180.0));	
  	
  
	
  
	
  	
  	
  	
  ingressos.stream().filter(	
  i	
  -­‐>	
  i.getValor()	
  <	
  120	
  );	
  
	
  
	
  	
  	
  	
  ingressos.forEach(	
  i	
  -­‐>	
  System.out.println(i)	
  );	
  
	
  
	
  	
  	
  	
  //imprime	
  Festa	
  1,	
  Festa	
  2	
  e	
  Festa	
  3	
  
}	
  
Globalcode	
  –	
  Open4education
Filtrar com Stream
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  new	
  ArrayList<>();	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  1",	
  100.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  2",	
  150.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  3",	
  180.0));	
  	
  
	
  
	
  	
  	
  	
  ingressos.stream()	
  
	
  	
  	
  	
  	
  	
  	
  .filter(	
  i	
  -­‐>	
  i.getValor()	
  <	
  120	
  )	
  
	
  	
  	
  	
  	
  	
  	
  .forEach(	
  i	
  -­‐>	
  System.out.println(i)	
  );	
  
	
  
	
  	
  	
  	
  //imprime	
  Festa	
  1	
  
}	
  
Globalcode	
  –	
  Open4education
Collectors, obtendo a lista
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  new	
  ArrayList<>();	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  1",	
  100.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  2",	
  150.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  3",	
  180.0));	
  	
  
	
  
	
  	
  	
  	
  ingressos.stream()	
  
	
  	
  	
  	
  	
  	
  	
  .filter(	
  i	
  -­‐>	
  i.getValor()	
  <	
  120	
  )	
  
	
  	
  	
  	
  	
  	
  	
  .collect(Collectors.toList());	
  	
  
}	
  
Globalcode	
  –	
  Open4education
Collectors, obtendo a lista
public	
  static	
  void	
  main(String[]	
  args)	
  {	
  
	
  	
  	
  	
  List<Ingresso>	
  ingressos	
  =	
  new	
  ArrayList<>();	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  1",	
  100.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  2",	
  150.0));	
  
	
  	
  	
  	
  ingressos.add(new	
  Ingresso("Festa	
  3",	
  180.0));	
  	
  
	
  
	
  	
  	
  	
  List<Ingressos>	
  ingressosBaratos	
  =	
  ingressos.stream()	
  
	
  	
  	
  	
  	
  	
  	
  .filter(	
  i	
  -­‐>	
  i.getValor()	
  <	
  120	
  )	
  
	
  	
  	
  	
  	
  	
  	
  .collect(Collectors.toList());	
  	
  
	
  	
  	
  	
  	
  
}	
  
Globalcode	
  –	
  Open4education
Obrigado!
Frederico Maia Arantes
fredericomaia10@gmail.com
http://fredmaia.com

Mais conteúdo relacionado

Mais procurados

PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPGuilherme Blanco
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OracleAndré Reis
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesOtávio Calaça Xavier
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DPaulo Henrique Lerbach Rodrigues
 
JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdadeLuis Vendrame
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPelliando dias
 
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - SocketsIntrodução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - SocketsAndre Peres
 
Introdução ao Respect\Validation (1.0)
Introdução ao Respect\Validation (1.0)Introdução ao Respect\Validation (1.0)
Introdução ao Respect\Validation (1.0)Henrique Moody
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsGuilherme Blanco
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Flávio Ribeiro
 
Lazy Evaluation em Scala
Lazy Evaluation em ScalaLazy Evaluation em Scala
Lazy Evaluation em Scalapmatiello
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3garux
 

Mais procurados (20)

SPL Datastructures
SPL DatastructuresSPL Datastructures
SPL Datastructures
 
PHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHPPHPubSP Object Calisthenics aplicado ao PHP
PHPubSP Object Calisthenics aplicado ao PHP
 
Passagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e OraclePassagem de Objetos entre Java e Oracle
Passagem de Objetos entre Java e Oracle
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - DMembros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
Membros da Classe - Preparatório Certificação - OCAJP7 - Aula 2 - D
 
Python 05
Python 05Python 05
Python 05
 
Heap Máximo
Heap MáximoHeap Máximo
Heap Máximo
 
JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdade
 
Integração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHPIntegração do Flex com PHP através do AMFPHP
Integração do Flex com PHP através do AMFPHP
 
Heap Mínimo e Máximo
Heap Mínimo e MáximoHeap Mínimo e Máximo
Heap Mínimo e Máximo
 
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - SocketsIntrodução a Redes de Computadores - 8 - Nível de Transporte - Sockets
Introdução a Redes de Computadores - 8 - Nível de Transporte - Sockets
 
Clean Code Matters!
Clean Code Matters!Clean Code Matters!
Clean Code Matters!
 
App scala
App scalaApp scala
App scala
 
Introdução ao Respect\Validation (1.0)
Introdução ao Respect\Validation (1.0)Introdução ao Respect\Validation (1.0)
Introdução ao Respect\Validation (1.0)
 
PHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object CalisthenicsPHP para Adultos: Clean Code e Object Calisthenics
PHP para Adultos: Clean Code e Object Calisthenics
 
SQL - Banco de Dados Biblioteca
SQL - Banco de Dados BibliotecaSQL - Banco de Dados Biblioteca
SQL - Banco de Dados Biblioteca
 
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5Implementação de Aplicações Móveis e Jogos com Python - Aula 5
Implementação de Aplicações Móveis e Jogos com Python - Aula 5
 
Lazy Evaluation em Scala
Lazy Evaluation em ScalaLazy Evaluation em Scala
Lazy Evaluation em Scala
 
Perl Moderno, dia3
Perl Moderno, dia3Perl Moderno, dia3
Perl Moderno, dia3
 
Python Class
Python ClassPython Class
Python Class
 

Semelhante a Java 8 recursos no dia a dia

Semelhante a Java 8 recursos no dia a dia (15)

Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6Palestra Novidades da linguagem C# 6
Palestra Novidades da linguagem C# 6
 
Beljug2010
Beljug2010Beljug2010
Beljug2010
 
Leonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional InterfacesLeonardo Zamariola - High Order Functions e Functional Interfaces
Leonardo Zamariola - High Order Functions e Functional Interfaces
 
Vraptor
VraptorVraptor
Vraptor
 
Java 8 - New Features
Java 8 - New FeaturesJava 8 - New Features
Java 8 - New Features
 
Java 07 Entrada Dados
Java 07 Entrada DadosJava 07 Entrada Dados
Java 07 Entrada Dados
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
Java para iniciantes
Java para iniciantesJava para iniciantes
Java para iniciantes
 
Flutter do zero a publicacao
Flutter do zero a publicacaoFlutter do zero a publicacao
Flutter do zero a publicacao
 
Grails: Java produtivo e divertido
Grails: Java produtivo e divertidoGrails: Java produtivo e divertido
Grails: Java produtivo e divertido
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Apresentando o EcmaScript 6
Apresentando o EcmaScript 6Apresentando o EcmaScript 6
Apresentando o EcmaScript 6
 
Aula actionscript basico
Aula actionscript basicoAula actionscript basico
Aula actionscript basico
 
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - BEscopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
Escopos e Modificadores - Preparatório Certificação - OCAJP7 - Aula 1 - B
 
POO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em JavaPOO - 09 - Entradas e Saídas em Java
POO - 09 - Entradas e Saídas em Java
 

Mais de Frederico Maia Arantes

The best way to create and deploy web apps with full-stack type safety - Mete...
The best way to create and deploy web apps with full-stack type safety - Mete...The best way to create and deploy web apps with full-stack type safety - Mete...
The best way to create and deploy web apps with full-stack type safety - Mete...Frederico Maia Arantes
 
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...Frederico Maia Arantes
 
Apresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaApresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaFrederico Maia Arantes
 
Meteor - Nunca foi tão fácil desenvolver pra web e mobile
Meteor - Nunca foi tão fácil desenvolver pra web e mobileMeteor - Nunca foi tão fácil desenvolver pra web e mobile
Meteor - Nunca foi tão fácil desenvolver pra web e mobileFrederico Maia Arantes
 
Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Frederico Maia Arantes
 
Boas práticas com jpa 2 e hibernate flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate flisol 2012Frederico Maia Arantes
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineFrederico Maia Arantes
 
Visão Geral do Java para Iniciantes - FLISOL 2011
Visão Geral do Java para Iniciantes - FLISOL 2011Visão Geral do Java para Iniciantes - FLISOL 2011
Visão Geral do Java para Iniciantes - FLISOL 2011Frederico Maia Arantes
 
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do GojavaJSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do GojavaFrederico Maia Arantes
 

Mais de Frederico Maia Arantes (13)

The best way to create and deploy web apps with full-stack type safety - Mete...
The best way to create and deploy web apps with full-stack type safety - Mete...The best way to create and deploy web apps with full-stack type safety - Mete...
The best way to create and deploy web apps with full-stack type safety - Mete...
 
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...
Produtividade e deploy na criação de apps NodeJS com MeteorJS - Join Communit...
 
Apresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - GoiâniaApresentando meteor! Join Community - Goiânia
Apresentando meteor! Join Community - Goiânia
 
Meteor - Nunca foi tão fácil desenvolver pra web e mobile
Meteor - Nunca foi tão fácil desenvolver pra web e mobileMeteor - Nunca foi tão fácil desenvolver pra web e mobile
Meteor - Nunca foi tão fácil desenvolver pra web e mobile
 
Java Web Fácil com VRaptor
Java Web Fácil com VRaptorJava Web Fácil com VRaptor
Java Web Fácil com VRaptor
 
Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012Introdução a JPA e Hibernate - TDC 2012
Introdução a JPA e Hibernate - TDC 2012
 
Boas práticas com jpa 2 e hibernate flisol 2012
Boas práticas com jpa 2 e hibernate   flisol 2012Boas práticas com jpa 2 e hibernate   flisol 2012
Boas práticas com jpa 2 e hibernate flisol 2012
 
Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011Java no Google App Engine - TDC2011
Java no Google App Engine - TDC2011
 
Minicurso jpa e hibernate
Minicurso jpa e hibernateMinicurso jpa e hibernate
Minicurso jpa e hibernate
 
Cloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App EngineCloud Computing - Java no Google App Engine
Cloud Computing - Java no Google App Engine
 
Visão Geral do Java para Iniciantes - FLISOL 2011
Visão Geral do Java para Iniciantes - FLISOL 2011Visão Geral do Java para Iniciantes - FLISOL 2011
Visão Geral do Java para Iniciantes - FLISOL 2011
 
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do GojavaJSF 2 e Primefaces - 4º Encontro Mensal do Gojava
JSF 2 e Primefaces - 4º Encontro Mensal do Gojava
 
Java e orientação a objetos
Java e orientação a objetosJava e orientação a objetos
Java e orientação a objetos
 

Java 8 recursos no dia a dia

  • 1. Globalcode  –  Open4education Java 8 Afinal onde usamos no dia a dia? Frederico Maia Arantes Desenvolvedor de Sofware / Instrutor
  • 2. Globalcode  –  Open4education Sobre mim   Frederico Maia Arantes  Goiano, atualmente no Rio de Janeiro  +7 anos de experiência em desenvolvimento  Desenvolvedor de software no LIP da TecSinapse  Instrutor de cursos Java na Caelum  Estudante - MBA em Engenharia de Software na UFRJ
  • 3. Globalcode  –  Open4education Sobre a palestra   Default Methods   Lambdas Expressions   Functional Interfaces   Streams   Collectors
  • 4. Globalcode  –  Open4education Classe ‘Ingresso’ public  class  Ingresso  {          private  String  nomeEvento;          private  double  valor;          public  Ingresso(String  nomeEvento,  double  valor)  {                  this.nomeEvento  =  nomeEvento;                  this.valor  =  valor;          }          //getters  e  setters          //toString()   }    
  • 5. Globalcode  –  Open4education Loop tradicional public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));            for(Ingresso  ingresso  :  ingressos)  {                  System.out.println(ingresso);          }   }  
  • 6. Globalcode  –  Open4education Novo loop com forEach public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));            ingressos.forEach(consumer);  //recebe  um  Consumer            //Consumer  é  uma  nova  interface  do  Java  8  com  um  único  método   }  
  • 7. Globalcode  –  Open4education Novo loop com forEach public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));            Consumer<Ingresso>  consumer  =  new  Consumer<Ingresso>()  {              @Override              public  void  accept(Ingresso  ingresso)  {                      System.out.println(ingresso);              }          };          ingressos.forEach(consumer);  //recebe  um  Consumer   }  
  • 8. Globalcode  –  Open4education Novo loop com forEach public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));            ingressos.forEach(new  Consumer<Ingresso>()  {              @Override              public  void  accept(Ingresso  ingresso)  {                      System.out.println(ingresso);              }          });   }  
  • 9. Globalcode  –  Open4education Remover ingressos caros public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  new  ArrayList<>();          ingressos.add(new  Ingresso("Festa  1",  100.0));          ingressos.add(new  Ingresso("Festa  2",  150.0));          ingressos.add(new  Ingresso("Festa  3",  180.0));              ingressos.removeIf(new  Predicate<Ingresso>()  {              @Override              public  boolean  test(Ingresso  ingresso)  {                    return  ingresso.getValor()  >  100;              }          });   }  
  • 10. Globalcode  –  Open4education Default methods Novos métodos, com implementação, adicionados às interfaces Java, como em Collections e Map. Veja por exemplo o forEach:   default  void  forEach(Consumer<?  super  T>  action)  {          Objects.requireNonNull(action);          for  (T  t  :  this)  {                  action.accept(t);          }   }     Outros: removeIf, sort, compare, computeIfPresente. Você pode criar default methods em suas interfaces.
  • 11. Globalcode  –  Open4education Legais os Default Methods! Mas agora preciso escrever mais código que antes, pra fazer a mesma coisa.
  • 12. Globalcode  –  Open4education Lambdas   O que são?   De onde vem?   De que se alimentam? “Simplificando bastante, um lambda no Java é uma maneira mais simples de implementar uma interface que tem um único método.”
  • 13. Globalcode  –  Open4education Lambdas public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));                        ingressos.forEach(new  Consumer<Ingresso>()  {              @Override              public  void  accept(Ingresso  ingresso)  {                      System.out.println(ingresso);              }          });   }
  • 14. Globalcode  –  Open4education Lambdas public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));                        ingressos.forEach(new  Consumer<Ingresso>()  {                public  void  accept(Ingresso  ingresso)  {                      System.out.println(ingresso);              }          });   }
  • 15. Globalcode  –  Open4education Lambdas public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));                        ingressos.forEach(                                                  {                public  void  accept(Ingresso  ingresso)  {                      System.out.println(ingresso);              }          });   }
  • 16. Globalcode  –  Open4education Lambdas public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));                        ingressos.forEach(                                                                                                      (Ingresso  ingresso)  {                      System.out.println(ingresso);                        });   }
  • 17. Globalcode  –  Open4education Lambdas public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));                        ingressos.forEach(                                                            (Ingresso  ingresso)  -­‐>  {  System.out.println(ingresso)  }          );   }
  • 18. Globalcode  –  Open4education Lambdas public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));                        ingressos.forEach(                                                            ingresso  -­‐>  {  System.out.println(ingresso)  }          );   }
  • 19. Globalcode  –  Open4education Lambdas public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  Arrays.asList(    new  Ingresso("Festa  1",  100.0),      new  Ingresso("Festa  2",  150.0),    new  Ingresso("Festa  3",  200.0));                        ingressos.forEach(ingresso  -­‐>  System.out.println(ingresso));   }
  • 20. Globalcode  –  Open4education Functional Interfaces   Interfaces com um único método abstrato. Este é um requisito obrigatório.   Exemplo: Consumer. Assim no forEach o compilador sabe o método que deverá ser implementado no lambda.   Funciona só em interfaces novas do Java 8? Não.   Para as novas, e as suas implementações, temos a anotação opcional @FunctionalInterface.
  • 21. Globalcode  –  Open4education Functional Interfaces button.addActionListener(new  ActionListener()  {        @Override        public  void  actionPerformed(ActionEvent  e){                System.out.println("clik!");          }     }); //Com  Lambda   button.addActionListener(e  -­‐>  System.out.println("click!"));    
  • 22. Globalcode  –  Open4education Streams   Trabalhar com coleções sempre envolve muito código.   Em muitas linguagens temos por exemplo um ‘filter’ pra facilitar nossa vida.   Forma mais funcional de lidar com coleções.
  • 23. Globalcode  –  Open4education Filtrar da forma tradicional public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  new  ArrayList<>();          ingressos.add(new  Ingresso("Festa  1",  100.0));          ingressos.add(new  Ingresso("Festa  2",  150.0));          ingressos.add(new  Ingresso("Festa  3",  180.0));            List<Ingresso>  ingressosBaratos  =  new  ArrayList<>();          for(Ingresso  ingresso  :  ingressos)  {                if(ingresso.getValor()  <  120)  {                      ingressosBaratos.add(ingresso);                }          }   }  
  • 24. Globalcode  –  Open4education Filtrar com Stream public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  new  ArrayList<>();          ingressos.add(new  Ingresso("Festa  1",  100.0));          ingressos.add(new  Ingresso("Festa  2",  150.0));          ingressos.add(new  Ingresso("Festa  3",  180.0));              Stream<Ingresso>  stream  =  ingressos.stream();     }  
  • 25. Globalcode  –  Open4education Filtrar com Stream public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  new  ArrayList<>();          ingressos.add(new  Ingresso("Festa  1",  100.0));          ingressos.add(new  Ingresso("Festa  2",  150.0));          ingressos.add(new  Ingresso("Festa  3",  180.0));              Stream<Ingresso>  stream  =  ingressos.stream();            stream.filter(  i  -­‐>  i.getValor()  <  120  );   }  
  • 26. Globalcode  –  Open4education Filtrar com Stream public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  new  ArrayList<>();          ingressos.add(new  Ingresso("Festa  1",  100.0));          ingressos.add(new  Ingresso("Festa  2",  150.0));          ingressos.add(new  Ingresso("Festa  3",  180.0));              ingressos.stream().filter(  i  -­‐>  i.getValor()  <  120  );   }  
  • 27. Globalcode  –  Open4education Filtrar com Stream public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  new  ArrayList<>();          ingressos.add(new  Ingresso("Festa  1",  100.0));          ingressos.add(new  Ingresso("Festa  2",  150.0));          ingressos.add(new  Ingresso("Festa  3",  180.0));              ingressos.stream().filter(  i  -­‐>  i.getValor()  <  120  );            ingressos.forEach(  i  -­‐>  System.out.println(i)  );            //imprime  Festa  1,  Festa  2  e  Festa  3   }  
  • 28. Globalcode  –  Open4education Filtrar com Stream public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  new  ArrayList<>();          ingressos.add(new  Ingresso("Festa  1",  100.0));          ingressos.add(new  Ingresso("Festa  2",  150.0));          ingressos.add(new  Ingresso("Festa  3",  180.0));              ingressos.stream()                .filter(  i  -­‐>  i.getValor()  <  120  )                .forEach(  i  -­‐>  System.out.println(i)  );            //imprime  Festa  1   }  
  • 29. Globalcode  –  Open4education Collectors, obtendo a lista public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  new  ArrayList<>();          ingressos.add(new  Ingresso("Festa  1",  100.0));          ingressos.add(new  Ingresso("Festa  2",  150.0));          ingressos.add(new  Ingresso("Festa  3",  180.0));              ingressos.stream()                .filter(  i  -­‐>  i.getValor()  <  120  )                .collect(Collectors.toList());     }  
  • 30. Globalcode  –  Open4education Collectors, obtendo a lista public  static  void  main(String[]  args)  {          List<Ingresso>  ingressos  =  new  ArrayList<>();          ingressos.add(new  Ingresso("Festa  1",  100.0));          ingressos.add(new  Ingresso("Festa  2",  150.0));          ingressos.add(new  Ingresso("Festa  3",  180.0));              List<Ingressos>  ingressosBaratos  =  ingressos.stream()                .filter(  i  -­‐>  i.getValor()  <  120  )                .collect(Collectors.toList());               }  
  • 31. Globalcode  –  Open4education Obrigado! Frederico Maia Arantes fredericomaia10@gmail.com http://fredmaia.com