-
Notifications
You must be signed in to change notification settings - Fork 235
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Desafio 8 #12
Comments
Só usar o reduce: numeros.stream().reduce(0, Integer::sum); ou numeros.stream().reduce(0, (n1, n2) -> n1 + n2); |
acho que vc pode remover aquele if do começo, e retornar apenas sum. Eu fiz assim int somaDigitos = numeros.stream().mapToInt(n1 -> {
int sum = 0, length = String.valueOf(n1).length();
for (int i = 0; i < length; i++) {
sum += n1 % 10;
n1 /= 10;
}
return sum;
}).sum(); o sum retorna 0 se o numero em questão nao existir, pois o for já faz essa verificação, se o numero não existir ele passa direto pelo laço e retorna 0 |
Então @Saul-Medeiros, pelo que pude perceber o IF acaba realizando a conferência quando o número possui apenas 1 dígito, não sendo necessário entrar uma vez no laço do FOR e retornando ele mesmo para fazer parte da soma. Ou seja, ele acaba economizando algumas interações do FOR. |
neste caso, não passando pelo laço ele seria mais rápido 🤔? é pq na minha concepção quanto menos código vc escrever é melhor, e pra cada número que o mapForInt* for testar ele vai ser obrigado a passar por esse if e pelo próprio for. |
Rapaz, nem tinha parado para testar o tempo, agora fiz um teste básico com o System.currentTimeMillis(), no array que ta ali nessa descrição com e sem o if o resultado foi 0 ms. Pode ser que fique melhor sem o IF mesmo, mais legível. Nesse exercício, como temos que somar todos os dígitos, esse IF verifica quantos dígitos tem o número e caso ele tenha apenas um (exemplo: 5) ele já retorna esse resultado devido o return, debuguei no Intellij pra ver kk. Agora no caso de algum número com mais de um dígito (exemplo: 245), ele segue para o FOR para decompor e realizar a somatório. No caso de ter um null, ele lança a exceção com ou sem o IF. |
Oi @cami-la , tudo bem?
Eu realizei a implementação do desafio 8, mais parece estar complexo, ainda não consegui pensar em uma forma de melhorar. Sabe me dizer outra forma de resolver?
Minha implementação:
Desafio 8 - Somar os dígitos de todos os números da lista:
Utilizando a Stream API, realize a soma dos dígitos de todos os números da lista e exiba o resultado no console.
List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3, 11, 28, 35, 180, 110, 200, 245);
The text was updated successfully, but these errors were encountered: