ganhando_produtividade_com_Stream_API_Java icon indicating copy to clipboard operation
ganhando_produtividade_com_Stream_API_Java copied to clipboard

Desafio 7

Open raulward opened this issue 1 year ago • 2 comments

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);
    }
}

raulward avatar Jul 25 '24 11:07 raulward

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;
}

fgmarcal avatar Aug 09 '24 14:08 fgmarcal

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

GustavoSutanaLima avatar Aug 25 '24 17:08 GustavoSutanaLima