Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Quando trabalhamos com Java e Spring, muitas vezes a busca pelo terceiro maior elemento em uma lista pode parecer simples, mas exige atenção às boas práticas de manipulação de streams.
No exemplo clássico, temos uma lista de números inteiros e precisamos extrair o terceiro maior de forma eficiente. A dica é usar a Stream API com uma combinação de ordenação e métodos de coleta.
List<Integer> list = Arrays.asList(1, 2, 3, 1, 4, 5, 28, 23, 99, 32, 102). Integer terceiroMaior = list.stream()
.distinct()
.sorted(Comparator.reverseOrder())
.skip(2)
.findFirst()
.orElse(null).
O que esse código faz:
distinct(). - Ordena de forma decrescente com sorted(Comparator.reverseOrder()). - Pula os dois primeiros (maiores) com skip(2). - Pega o próximo, que será o terceiro maior, usando findFirst().A questão é: essa abordagem é eficiente para listas grandes? E como garantir que o método seja robusto em cenários com valores repetidos ou listas menores? Testar esses casos é fundamental para evitar surpresas. O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco.
Para quem já tentou, como vocês lidam com esses desafios na prática? Ainda usam ordenação completa ou preferem algoritmos mais específicos para esse tipo de busca? Por isso, o recorte precisa considerar manutenção, validação e caminho de volta. Esse contexto ajuda a separar ganho real de novidade difícil de sustentar. A decisão fica mais saudável quando o time consegue medir o impacto depois.
hum achei essa solucao bem direta mas pra listas muito grandes pode pesar na performance por causa da ordenacao completa. Ja passei por isso as vezes um algoritmo de selecao poderia ser mais eficiente.
hum
Exato, Thiago. Aqui no meu time, a gente faz assim pra evitar o custo de ordenar listas enormes.