digitalinnovationone / ganhando_produtividade_com_Stream_API_Java

Este repositório contém o código-fonte do curso "Ganhando Produtividade com Stream API Java". O curso foi projetado para ajudar desenvolvedores Java a aproveitar ao máximo a poderosa Stream API introduzida no Java 8.
https://web.dio.me/course/ganhando-produtividade-com-stream-api
802 stars 503 forks source link

Desafio 7 #22

Open raulward opened 4 months ago

raulward commented 4 months ago

Existe alguma inconsistência ou má prática em fazer dessa forma?

Além disso, existe alguma maneira mais eficiente de fazer a busca do elemento?


public class Desafio7 {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
        int maiorNumero = numeros.stream()
                .max(Comparator.naturalOrder())
                .orElseThrow(() -> new NoSuchElementException("Nao foi possivel achar o elemento"));

        int segundoMaiorNumero = numeros.stream()
                .filter(n -> n != maiorNumero)
                .max(Comparator.naturalOrder())
                .orElseThrow(() -> new NoSuchElementException("Nao foi possivel achar o elemento"));

        System.out.println(segundoMaiorNumero);
    }
}
fgmarcal commented 3 months ago

bom dia, amigo

fiz assim:

//Desafio 7 - Encontrar o segundo número maior da lista:
public static int findSecondLargest(List<Integer> list) {
    var maxNumber = list.stream().max(Integer::compare).get();
    var secondLargest = list.stream()
            .filter(n -> n < maxNumber)
            .max(Integer::compare).get();

    return secondLargest;
}
GustavoSutanaLima commented 3 months ago

Pensei que se você invocasse stream() em uma lista, não era mais possível usar de novo na mesma lista. Estranho... entendi errado