Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Se você trabalha com Java e precisa extrair o terceiro maior valor de uma lista de inteiros, a solução com StreamAPI é prática e elegante.
Por exemplo, imagine uma lista de números como:
List<Integer> list = Arrays.asList(1, 2, 3, 1, 4, 5, 28, 23, 99, 32, 102).
Para pegar o terceiro maior, você pode ordenar e filtrar usando streams:
int terceiroMaior = list.stream()
.distinct()
.sorted(Comparator.reverseOrder())
.skip(2)
.findFirst()
.orElseThrow(() -> new RuntimeException("Lista não possui três elementos distintos")). O valor aparece melhor quando operação, produto e engenharia olham para o mesmo risco. 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.
Dá para fazer assim, mas o que mais pesa na prática é entender o impacto na performance, especialmente se a lista for gigante. Você já usou alguma abordagem parecida? Como vocês costumam resolver esse tipo de problema na rotina de vocês? Por isso, o recorte precisa considerar manutenção, validação e caminho de volta.
essa história de usar stream é massa, mas às vezes fica difícil de entender na hora do suporte, né? prefiro uma solução mais explícita pra garantir o entendimento do time.
hum, na minha experiência, essa abordagem funciona bem pra listas pequenas, mas se o volume crescer, o custo de ordenar toda a lista pode pesar. Talvez uma solução iterativa, mantendo os três maiores durante o percurso, seja mais eficiente.
No meu time, a gente tenta sempre pensar na operação de leitura e na escala. Pra listas gigantes, prefiro algoritmo que faz uma passada só, assim evita ordenar tudo e melhora a latência.
Concordo, pixel. Em sistemas com alta performance, evitar ordenar toda a lista faz diferença.