Comments (9)
Boa tarde, @thiagovanzele. Parabéns pelos estudos, viu? Está indo bem!
Deixa eu te mostrar uma forma de fazer. Lembrando que existem outras formas:
- Removemos elementos repetidos com
distinct()
para garantir que a lista tem apenas elementos únicos. - Ordenamos os números na ordem decrescente com
sorted(Comparator.reverseOrder())
, - Depois pulamos o primeiro número com
skip(1)
- Encontramos o primeiro elemento após o pulo com
findFirst()
- Como o
findFirst()
retorna umOptional
, precisamos tratar. Usei aqui o métodoorElse(null)
para obter o valor caso exista. Caso contrário, retornanull
.
List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
Integer segundoNumero = numeros.stream()
.distinct() // Remove elementos repetidos
.sorted(Comparator.reverseOrder()) // Ordena os números na ordem decrescente
.skip(1) // Pula o primeiro número
.findFirst() // Encontra o primeiro elemento após o pulo
.orElse(null); // Se não encontrar, retorna null
Se ficou alguma dúvida, me avisa que fazemos de outras formas. (:
from ganhando_produtividade_com_stream_api_java.
Parabéns pela resposta, @siqueirarxd. Muito bom! (:
Não sei se você conhece, mas você também poderia utilizar o método orElseThrow()
. Porque daí, já lançamos uma exception caso não exista um segundo maior número.
Exemplo de solução:
List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
Integer segundoNumero = numeros.stream()
.distinct() // Remove elementos repetidos
.sorted(Comparator.reverseOrder()) // Ordena os números na ordem decrescente
.skip(1) // Pula o primeiro número
.findFirst() // Encontra o primeiro elemento após o pulo
.orElseThrow(() -> new NoSuchElementException("Não existe segundo maior número."));
Bons estudos para nós!
from ganhando_produtividade_com_stream_api_java.
Massa, @willianac.
Parabéns! Não tinha pensando em resolver desse jeito. Aprendi mais uma! Obrigada por compartilhar. <3
from ganhando_produtividade_com_stream_api_java.
Outra maneira de resolver seria ordenando o array de forma crescente e pegando o penúltimo elemento, consequentemente o segundo mais alto. Utilizando também o distinct()
para que ele não pegue o elemento mais alto caso o mais alto se repita.
List<Integer> numerosOrdenado = numeros.stream()
.sorted()
.distinct()
.collect(Collectors.toList());
int segundoMaisAlto = numerosOrdenado.get(numerosOrdenado.size() - 2));
from ganhando_produtividade_com_stream_api_java.
Olha como ficou o meu...
public class Desafio7 {
public static void main(String[] args) {
List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 5, 4, 10);
Optional<Integer> primeiroMaior = numeros.stream().max(Integer::compareTo);
Integer x = numeros.stream().reduce(0, (Integer n, Integer n2)-> {
return (n2 > n && n2 < primeiroMaior.get()) ? n2 : n;
});
System.out.println("Numero reduce: " + x);
}
}
from ganhando_produtividade_com_stream_api_java.
Parabéns, @jpvalim. Só ficou um mais complexa a solução. Mas chegando no resultado, ótimo!
Mais uma vez parabéns pelos estudos! (:
from ganhando_produtividade_com_stream_api_java.
Usei o limit hehe
numbers.stream().sorted(Collections.reverseOrder()).skip(1).limit(1).forEach(System.out::println);
from ganhando_produtividade_com_stream_api_java.
int segundoMaior = numeros.stream().sorted().toList().get(11);
Fiz desse jeito, na prática deu certo, mas como disse, não parece a maneira correta...
from ganhando_produtividade_com_stream_api_java.
System.out.println(nums.stream().distinct().sorted((a, b) -> b.compareTo(a)).skip(1).findFirst().orElse(null));
Fiz assim. Tive que usar um recurso de optional, mesmo não assistindo o vídeo sobre essa parte ainda. Mas acho que ficou mais dinâmico, visto que você pode adicionar números na lista depois e o código ainda assim retornar o resultado correto.
from ganhando_produtividade_com_stream_api_java.
Related Issues (18)
- DUVIDA - STREAM-API HOT 2
- Desafio 14 e 17 HOT 4
- Desafio 14 HOT 3
- Desafio 8 HOT 7
- Dúvida desafio 4 HOT 4
- Desafio 2 HOT 2
- Dúvida desafio 7 HOT 6
- DUVIDA - ERRO NO IMPORT STREAM HOT 5
- um breve e concisa explicação sobre o código abaixo HOT 1
- Duvida Desafio 10 HOT 5
- Duvida no desafio 5 HOT 1
- Duvida Binary Operator HOT 6
- Duvida desafio 16 HOT 2
- Duvida Desafio 5 HOT 3
- Dúvida no Reduce HOT 3
- Dúvida desafio 3 HOT 6
- Desafio 18 HOT 4
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ganhando_produtividade_com_stream_api_java.