ganhando_produtividade_com_Stream_API_Java
ganhando_produtividade_com_Stream_API_Java copied to clipboard
Desafio 7
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);
}
}
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;
}
Pensei que se você invocasse stream() em uma lista, não era mais possível usar de novo na mesma lista. Estranho... entendi errado