🧠 Resumo Rápido
Para ordenar coleções com Stream API, usamos o método .sorted().
Existem duas formas principais:
stream.sorted()– usa a ordem natural dos elementos (precisam implementarComparable)stream.sorted(Comparator)– permite fornecer um critério de ordenação customizado
🔹 Exemplo 1 – Ordem natural
List<String> nomes = List.of("Carlos", "Ana", "Bruno");
List<String> ordenados = nomes.stream()
.sorted() // Usa compareTo da String
.collect(Collectors.toList());
// Resultado: [Ana, Bruno, Carlos]
🔹 Exemplo 2 – Ordem reversa
List<String> nomes = List.of("Carlos", "Ana", "Bruno");
List<String> ordenados = nomes.stream()
.sorted(Comparator.reverseOrder())
.collect(Collectors.toList());
// Resultado: [Carlos, Bruno, Ana]
🔹 Exemplo 3 – Ordenar por campo (objeto)
class Pessoa {
String nome;
int idade;
Pessoa(String nome, int idade) {
this.nome = nome;
this.idade = idade;
}
public String toString() {
return nome + " - " + idade;
}
}
List<Pessoa> pessoas = List.of(
new Pessoa("Ana", 30),
new Pessoa("Carlos", 25),
new Pessoa("Bruno", 28)
);
// Ordenar por idade
List<Pessoa> ordenadas = pessoas.stream()
.sorted(Comparator.comparingInt(p -> p.idade))
.collect(Collectors.toList());
🧨 Pegadinhas que caem na prova
🔸 Pegadinha 1: .sorted() só funciona se os elementos forem comparáveis (Comparable implementado).
🔸 Pegadinha 2: sorted() não modifica a lista original. O stream é imutável.
🔸 Pegadinha 3: Cuidado com List.of(...), que é imutável – tentar sort() direto nela dá erro.
✅ Métodos úteis com .sorted()
| Método | Descrição |
|---|---|
sorted() | Ordem natural (Comparable) |
sorted(Comparator.reverseOrder()) | Ordem inversa |
sorted(Comparator.comparing(...)) | Ordenação customizada |
comparingInt(), comparingDouble() | Para tipos primitivos |
💡 Dica de prova
- Prefira
Comparator.comparingInt()para inteiros (evita boxing). - Não confunda
.sort()daListcom.sorted()doStream. - Streams são imutáveis → sempre use
.collect()para obter a nova lista.
🔸 1. Qual das alternativas ordena corretamente uma lista de Strings usando Stream API?
A) lista.stream().sort().collect(Collectors.toList());
B) lista.stream().sorted().collect(Collectors.toList());
C) lista.sorted().stream().collect(Collectors.toList());
D) lista.stream().orderBy().collect(Collectors.toList());
🔸 2. O que acontece ao usar sorted() em uma stream de objetos que não implementam Comparable e sem fornecer um Comparator?
A) Lança ClassCastException
B) Lança NullPointerException
C) Ordena aleatoriamente
D) Compila normalmente, mas dá erro de lógica
🔸 3. Qual a principal diferença entre sorted() e List.sort()?
A) Ambos modificam a lista original
B) Apenas List.sort() modifica a lista original
C) sorted() é exclusivo para listas mutáveis
D) List.sort() cria uma nova lista
🔸 4. Considerando a classe abaixo, qual expressão ordena por nome em ordem alfabética?
class Pessoa {
String nome;
int idade;
}
A) stream.sorted((p1, p2) -> p1.nome < p2.nome)
B) stream.sorted(Comparator.comparing(p -> p.nome))
C) stream.sorted(Comparator.comparing(Pessoa::getNome))
D) B e C estão corretas
🔸 5. Dado:
List<Integer> numeros = List.of(5, 2, 8, 1);
Qual expressão ordena do menor para o maior?
A) numeros.stream().sorted().collect(Collectors.toList());
B) numeros.stream().sort().collect(Collectors.toList());
C) numeros.stream().sorted((a,b) -> b - a).collect(Collectors.toList());
D) A e C estão corretas
🔸 6. O que retorna Comparator.reverseOrder()?
A) Um Comparator que inverte a ordem natural
B) Um Comparator que retorna null
C) Um Comparator que compara por hashcode
D) Um método da classe Stream
🔸 7. Qual é mais eficiente para ordenar inteiros com Stream?
A) Comparator.comparing(p -> p.idade)
B) Comparator.comparingInt(p -> p.idade)
C) Comparator.comparing(Integer::valueOf)
D) Ambas são igualmente eficientes
🔸 8. Qual expressão ordena uma stream de doubles na ordem decrescente?
A) sorted(Comparator.comparingDouble(d -> -d))
B) sorted().reversed()
C) sorted(Comparator.reverseOrder())
D) A e C estão corretas
🔸 9. É possível ordenar um Set com Stream API?
A) Sim, convertendo para stream e usando sorted()
B) Não, Set não pode ser ordenado
C) Apenas TreeSet pode ser ordenado
D) Somente com .sort()
🔸 10. O que acontece se null aparecer em uma Stream e for usado sorted()?
A) Ordena normalmente
B) Lança NullPointerException
C) Ignora os null
D) Substitui null por zero
✅ Gabarito Comentado
- B –
.sorted()é o método correto,.sort()não existe em stream. - A – Se o objeto não implementa
Comparable, osorted()sem Comparator lançaClassCastException. - B –
List.sort()modifica a lista,stream.sorted()não. - D – Ambos
comparing(p -> p.nome)ePessoa::getNomefuncionam. - D –
sorted()ordena crescente,(b - a)faz decrescente. - A –
reverseOrder()inverte a ordem natural. - B –
comparingIntevita boxing e é mais eficiente para primitivos. - D – Ambas expressões ordenam decrescente com doubles.
- A – Qualquer coleção pode ser transformada em Stream e ordenada.
- B –
sorted()comnullgeralmente lançaNullPointerExceptionsecompareTofor chamado.