🔍 Métodos de busca em Streams

Objetivo da prova OCP Java 8: Saber como usar os métodos de busca e verificação em streams:

  • findFirst()
  • findAny()
  • anyMatch()
  • allMatch()
  • noneMatch()

1. findFirst()

Retorna o primeiro elemento do stream (como um Optional<T>).

Stream<String> s = Stream.of("a", "b", "c");
Optional<String> o = s.findFirst();
System.out.println(o.get()); // a

💡 É determinístico em streams sequenciais (sempre o primeiro)


2. findAny()

Retorna qualquer elemento (também um Optional<T>).

Stream<String> s = Stream.of("a", "b", "c");
Optional<String> o = s.findAny();
System.out.println(o.get());

// "a" (sequencial) ou qualquer um (em paralelo)

💡 Pode ser mais rápido em streams paralelos


3. anyMatch(Predicate)

Retorna true se algum elemento satisfaz o predicado.

List<String> nomes = List.of("Ana", "João", "Lucas");

boolean algumComJ = nomes.stream()

.anyMatch(n -> n.startsWith("J"));
System.out.println(algumComJ);

// true

4. allMatch(Predicate)

Retorna true se todos os elementos satisfazem o predicado.

boolean todosComA = nomes.stream()
.allMatch(n -> n.contains("a"));
System.out.println(todosComA);

// false

5. noneMatch(Predicate)

Retorna true se nenhum satisfaz o predicado.

boolean nenhumComZ = nomes.stream()
.noneMatch(n -> n.contains("z"));
System.out.println(nenhumComZ);

// true

🧠 Regras e pegadinhas:

  • Todos esses métodos são terminais (encerram o stream).
  • findFirst() e findAny() retornam Optional, e não lançam exceção se o stream estiver vazio.
  • anyMatch, allMatch e noneMatch retornam boolean.
  • Eles podem curto-circuitar (parar de avaliar antes do fim, se já tiver o resultado).

😈 Exemplo com pegadinha:

Stream<String> s = Stream.of("a", "b", "c");
Optional<String> resultado = s
.filter(x -> x.equals("z"))
.findFirst();

System.out.println(resultado.isPresent());

// false

findFirst retorna Optional.empty se nada for encontrado!


📌 Diferença findFirst vs findAny

MétodoGarantia de ordem?Indicado para…
findFirst✅ SimStreams sequenciais
findAny❌ NãoStreams paralelos (melhor performance)
✅ Questão 1

A – O findFirst() retorna um Optional com valor presente (“java”).

O que retorna este código?

Stream<String> stream = Stream.of("java", "ocp", "cert");
Optional<String> result = stream.findFirst();
System.out.println(result.isPresent());

A) true
B) false
C) Compila mas lança exceção
D) Não compila


Questão 2

CanyMatch() retorna true se algum elemento casar com o predicado.

Qual das opções retorna true se algum elemento do stream corresponder ao predicado?

A) stream.allMatch(p)
B) stream.noneMatch(p)
C) stream.anyMatch(p)
D) stream.findFirst().isPresent()


✅ Questão 3

C – Em streams paralelos, findAny() pode retornar qualquer elemento.

O que é retornado por findAny() em um stream paralelo?

A) Sempre o primeiro elemento
B) Sempre o último
C) Pode ser qualquer elemento
D) Nenhum elemento se o stream for paralelo


✅ Questão 4

B – Como “João” começa com “J”, o noneMatch retorna false.

Dado:

List<String> nomes = Arrays.asList("Ana", "João", "Lucas");
boolean resultado = nomes.stream().noneMatch(n -> n.startsWith("J"));

Qual o valor de resultado?

A) true
B) false
C) Lança exceção
D) Não compila


✅ Questão 5

C – Se nenhum valor for encontrado, o retorno será Optional.empty().

Qual opção é verdadeira sobre findFirst()?

A) Retorna o último elemento do stream
B) Retorna um boolean
C) Pode retornar Optional.empty()
D) Lança NullPointerException se o stream estiver vazio


✅ Questão 6

C – Um stream vazio com findAny() retorna Optional.empty().

O que acontece se findAny() for chamado em um stream vazio?

A) Lança exceção
B) Retorna null
C) Retorna Optional.empty()
D) Compila mas não executa


✅ Questão 7

DallMatch() é um método terminal. Os outros são intermediários.

Qual dessas chamadas encerra o pipeline do stream (é terminal)?

A) filter()
B) map()
C) peek()
D) allMatch()


✅ Questão 8

B – Nenhum valor do stream é "d", então retorna false.

Considere:

Stream<String> s = Stream.of("a", "b", "c");
boolean resultado = s.anyMatch(x -> x.equals("d"));

Qual o valor de resultado?

A) true
B) false
C) Não compila
D) Lança exceção


✅ Questão 9

BfindAny() retorna Optional<T>, onde T é o tipo do stream.

Qual é o tipo de retorno de findAny()?

A) String
B) Optional<T>
C) Stream<T>
D) boolean


✅ Questão 10

B – O stream está vazio, então findFirst().isPresent() será false.

Dado:

Stream<String> s = Stream.empty();
System.out.println(s.findFirst().isPresent());

Qual a saída?

A) true
B) false
C) null
D) Lança exceção


📘 Gabarito Comentado

  1. A – O findFirst() retorna um Optional com valor presente (“java”).
  2. CanyMatch() retorna true se algum elemento casar com o predicado.
  3. C – Em streams paralelos, findAny() pode retornar qualquer elemento.
  4. B – Como “João” começa com “J”, o noneMatch retorna false.
  5. C – Se nenhum valor for encontrado, o retorno será Optional.empty().
  6. C – Um stream vazio com findAny() retorna Optional.empty().
  7. DallMatch() é um método terminal. Os outros são intermediários.
  8. B – Nenhum valor do stream é "d", então retorna false.
  9. BfindAny() retorna Optional<T>, onde T é o tipo do stream.
  10. B – O stream está vazio, então findFirst().isPresent() será false.

Deixe um comentário