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()efindAny()retornam Optional, e não lançam exceção se o stream estiver vazio.anyMatch,allMatchenoneMatchretornam 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
findFirstretornaOptional.emptyse nada for encontrado!
📌 Diferença findFirst vs findAny
| Método | Garantia de ordem? | Indicado para… |
|---|---|---|
| findFirst | ✅ Sim | Streams sequenciais |
| findAny | ❌ Não | Streams 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
✅C – anyMatch() 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
✅ D – allMatch() é 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
✅ B – findAny() 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
- ✅ A – O
findFirst()retorna um Optional com valor presente (“java”). - ✅ C –
anyMatch()retornatruese algum elemento casar com o predicado. - ✅ C – Em streams paralelos,
findAny()pode retornar qualquer elemento. - ✅ B – Como “João” começa com “J”, o
noneMatchretornafalse. - ✅ C – Se nenhum valor for encontrado, o retorno será
Optional.empty(). - ✅ C – Um stream vazio com
findAny()retornaOptional.empty(). - ✅ D –
allMatch()é um método terminal. Os outros são intermediários. - ✅ B – Nenhum valor do stream é
"d", então retornafalse. - ✅ B –
findAny()retornaOptional<T>, onde T é o tipo do stream. - ✅ B – O stream está vazio, então
findFirst().isPresent()seráfalse.