Skip to content

Instantly share code, notes, and snippets.

@asouza
Last active August 29, 2015 13:58
Show Gist options
  • Save asouza/10302693 to your computer and use it in GitHub Desktop.
Save asouza/10302693 to your computer and use it in GitHub Desktop.
Pegando só o primeiro elemento que obedece aos filtros sem a necessidade de passar pela lista inteira :). Claro que você pode fazer isso usando um loop normal, mas aqui isso é deixado para a API de Streams :)
class ExemploMaisComum {
private static List<Integer> numeros = Arrays.asList(1,2,3,4,5,6,7,8);
//passando por todos os números, a não ser que você programe a parada
public static void main(String[] args){
List<Integer> achados = new ArrayList<>();
for(int n : numeros){
if(n % 2 == 0){
achados.add(n);
//poderia parar aqui, é claro :).
}
}
for(int i=0;i<achados.size();i++){
//alterando o estado da lista
achados.set(i,achados[i] * 2);
}
System.out.println(achados.get(0))
}
}
class ExemploComStream {
private static List<Integer> numeros = Arrays.asList(1,2,3,4,5,6,7,8);
//passando apenas pelo primemiro encontrado, sem você se preocupar. #l......azy
public static void main(String[] args){
System.out.println(numeros.stream().filter(n -> n % 2 == 0).map(n -> n * 2)
.peek(n -> System.out.println(n)).findFirst());
}
}
@alexandreaquiles
Copy link

Rola de colocar o peek logo no começo!

numeros.stream()
.peek(System.out::println)
.filter(n -> n % 2 == 0)
.map(n -> n * 2)
.findFirst()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment