Giter VIP home page Giter VIP logo

digitalinnovationone / ganhando_produtividade_com_stream_api_java Goto Github PK

View Code? Open in Web Editor NEW
694.0 3.0 428.0 47 KB

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.

Home Page: https://web.dio.me/course/ganhando-produtividade-com-stream-api

Java 100.00%
java17 java8 programacao-funcional

ganhando_produtividade_com_stream_api_java's Issues

um breve e concisa explicação sobre o código abaixo

Stream API Java - Principais Métodos

Vamos praticar e aprofundar nossos conhecimentos na poderosa Stream API do Java!
Abaixo, apresentamos uma lista de desafios envolvendo operações com streams para exercitar suas habilidades e criatividade.

Para todos os desafios, utilizem a lista de números inteiros fornecida:

List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);

Desafio 1 - Mostre a lista na ordem numérica:

Crie um programa que utilize a Stream API para ordenar a lista de números em ordem crescente e a exiba no console.

Código

import java.util.Arrays;
import java.util.List;

public class Desafio1 {
    public static void main(String[] args) {
        //criar lista números inteiros
        List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
        //usar o sorted para ordenação dos números
        //Teste de impressão , não precisa explicar
        //numeros.stream().forEach(System.out::println);
        //Teste do sorted() com impressão
        //numeros.stream().sorted().forEach(System.out::println);
        //Copiei da internet queria entender os parâmetros dentro do sorted onde posso pesquisar o assunto, obrigado pela atenção.
        numeros.stream().sorted(Integer::compareTo).forEach(System.out::println);
    }
}

Duvida desafio 7

Boa tarde, prô!

Estou com dúvida no exercicio 7, como localizar o segundo maior valor da lista usando stream, qual seria a maneira correta usando stream? pensei em organizar do menor para o maior, contar a quantidade de elementos da stream e usar o skip para pular ate o penultimo, mas nao parece ser a maneira correta...

DUVIDA - STREAM-API

Olá, estou tentando remover elementos utilizando o removeIf, mas a IDE me passa uma exception = UnsupportedOperationException : remove
List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);

         numeros.removeIf(n -> n % 2 != 0);
         System.out.println(numeros);

Obs: Tentei de diversas maneiras, mesmo colocando como exceção checada e não checada, simplesmente ele não aceita, o que faço?

att Rafael

Desafio 2

Boa noite Camila, tudo bem? Estou com dificuldade para resolver o exercício nº 2 (Soma dos pares)

List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
		Function<Integer, Integer> somaPar = n -> n+=(n % 2);
		List<Integer> somaNumerosPares = numeros.stream().map(somaPar).toList();
		somaNumerosPares.forEach(System.out::print);

Gostaria de um auxílio se fosse possível, obrigado.

Desafio 11

Olá Cami,

Primeiramente muito obrigado pelas aulas.

Gostaria de tirar uma duvida sobre o desafio 11 (Soma dos quadrados da lista)).

Pensei nesta forma de resolver este problema mas o resultado está dando negativo.

public class Desafio11_somaDosQuadrados {
public static void main(String[] args) {
List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
Integer numerosAoQuadrado = numeros.stream().reduce(0, (a, b) -> getSquare(a) + getSquare(b));
System.out.println(numerosAoQuadrado);
}

private static Integer getSquare(int number) {
    return number*number;
}

}

Desafio 8

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

    int resultado = numeros.stream().mapToInt(n -> {
        if (n / 10 == 0) return n;
        int sum = 0;
        int length = String.valueOf(n).length();
        for (int i = 0; i < length; i++) {
            sum += n % 10;
            n = n / 10;
        }
        return sum;
    }).sum();

    System.out.println("A soma dos dígitos de todos os números da lista é: " + resultado);`

DUVIDA - ERRO NO IMPORT STREAM

Olá,
Estou fazendo a aulas sobre Stream API, e quando faço o import do Stream, ele apresenta um erro como se eu não tivesse usando o import, e no Stream fica aparecendo o erro embaixo como eu não tivesse importado, eu já exclui a classe e refiz, exclui o projeto e refiz, eu atualizei o Java JDK, mas não consegui achar a causa, poderia me ajudar ?

Obs: No "Consumer" eu não utilizei o Stream apenas o forEach e consegui resolver da mesma maneira, mas o Stream sempre apresenta esse erro.

duvida import

Dúvida desafio 4

Oi, Camila!

No desafio 4, consegui selecionar os números ímpares, porém quando fui removê-los da lista, não deu certo (tentei remover utilizando o método removeAll). Qual o procedimento para a remoção?

Obrigado!

Segue meu código:

public class RemoverImpares {

public static void main(String[] args) {

    List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);

    List<Integer> numerosImpares = numeros.stream().filter(n -> n % 2 != 0).toList();

}

}

Duvida Desafio 5

List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
        OptionalDouble media = numeros.stream().filter(n -> n > 5).mapToDouble(Integer::doubleValue).average();
        System.out.printf("A média para os maiores de 5 é : " + media);

Eu cheguei a essa conclusão, porém na impressão sai, OptionalDouble[8.0]

eu gostaria que imprimisse no console somente o resultado da média, 8.0 sem o OptionalDouble.
Captura de tela 2023-08-28 203101

Duvida Desafio 10

Olá, Cami. Tudo bem?

Consegui resolver o desafio 10 porém gostaria de saber se há uma forma melhor para simplificar o código, sinto que repeti na verificação dos multiplos mas nao consegui pensar em outra forma de resolver. Pode me ajudar?

image

Dúvida desafio 7

Oi Camila!
No desafio 7 realizei esta implementação:

package stream_api;

import java.util.Arrays;
import java.util.List;

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);
        System.out.println(numeros.stream().sorted().toList().get(numeros.size()-2));
    }
}

porém fiquei com dúvida se seria uma boa forma de obter o elemento pedido usando get(numeros.size()-2)).

Duvida desafio 16

Boa tarde,

Já realizei os demais desafios porém ainda não sei como resolver o desafio 16. Não sei se preciso criar uma List para acomodar o inteiro passado pelo usuário ou se existe alguma forma direta.

Desafio 19

https://github.com/IgorTudisco/DIO---Trilha-Java-B-sico/tree/main/Ganhando_Produtividade_com_Stream_API/Desafio/DesafioStreamAPI/src/desafiostreamapi/desafio

Não entendi como usar o Stream para resolver esse desafio.

Se possível, gostaria que me explicasse essa parte.


package desafiostreamapi.desafio;

import java.util.*;
import java.util.function.*;

public class D19 {
    
    public static void main(String[] args) {
        
        List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
        
        BinaryOperator<Integer> somaTodos = (n1, n2) -> n1 + n2;
        
        Consumer<Integer> printSoma = n1 -> {
            Integer soma;
            if(n1 % 3 == 0){
                soma = numeros.stream().reduce(0, somaTodos);
                System.out.println(soma);
            } else if (n1 == 5){
                System.out.println(n1);
            }
        }; 
        
        numeros.stream().forEach(printSoma);
        
        
        
    }
    
}

// Desafio -> https://github.com/digitalinnovationone/ganhando_produtividade_com_Stream_API_Java/tree/master/src/stream_api

Duvida Binary Operator

Tentei reproduzir o binary Operator na minha IDE e simplesmente da um warning sem proposta de solução. Eu posso até copiar do exemplor do GIT aqui que continua dando erro.

Dúvida desafio 3

Oi, Cami, tudo bem?

Estou resolvendo os desafios e fiquei na dúvida em como eu posso resolver o desafio 3.
"Desafio 3 - Verifique se todos os números da lista são positivos:"

Eu queria fazer um comparador, item por item da lista, e vir retornando "Verdadeiro" ou "Falso", mas estou com dificuldades.

Como eu posso fazer para ele fazer o teste lógico e vir retornando o resultado booleano, item por item?

Poderia me ajudar?

Dúvida no Reduce

Olá Cami.

Sobre o desafio 12, eu fiz a resolução da seguinte forma:
int produto = numeros.stream().reduce(0, (num1, num2) -> num1 * num2);

Porém, estava dando sempre 0. Então para fins de estudo, joguei no Bard e ele me retornou a seguinte resolução:
int produto = numeros.stream().reduce(1, (num1, num2) -> num1 * num2);

Então acho que não entendi muito para que serve esse número antes da operação, dentro do reduce: antes eu
havia colocado 0, depois tive de colocar 1.
Pelo que você explicou ele é um acumulador certo? Para soma ele funciona normal.
Seria mais ou menos algo como: Acumular utilizando aquele número, já que multiplicação por 0 sempre dará 0.
Se poder me explicar melhor, meio que entendi a lógica mas não entendi como funciona exatamente.

Desafio 14 e 17

Oi Cami, tudo bem?
Estou com dificuldade no desafio 14 e 17 por conta dos números primos.
Poderia me ajudar com o código por favor?
tentei o 14 assim:
public class Desafio14 {
public static void main(String[] args) {
List numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);

    //Encontre o maior número primo da lista:
    int maiorPrimo = numeros.stream()
        .filter(n -> (n % n == 0 && n % 1 == 0));
        .mapToInt(Integer::intValue)
        .max()
    System.out.println(maiorPrimo);
}

}
mas não faz sentido, então não consegui fazer o 17 por ser parecido também

Desafio 14

Ola @cami-la , tudo bem?

travei no desafio 14, encontrei um aluno que fez um codigo genial:


 Optional<Integer> maiorPrimo = numeros.stream()
                .filter(n -> {
                    if (Math.abs(n) < 2)
                        return false;
                    for (int i = 2; i < Math.abs(n); i++) {
                        if (Math.abs(n) % i == 0)
                            return false;
                    }
                    return true;
                })
                .max(Comparator.naturalOrder());
        System.out.println("O maior número primo é: " + maiorPrimo.get());
    }

testei e funcionou, porem nao entendi, porque ele utilizou o Math.abs, pesquisei sobre essa função, e ela serve para retornar o valor absoluto, como utilizamos divisao com mod zero, seria mesmo necessario? não entend o fato delle utilizar tambem : .filter(n -> { if (Math.abs(n) < 2) return false; , qual seria o sentido de comprar se o valor absoluto de "n" por exemplo da lista, se o valor absoluto de 2 é menor que 2? e caso seja, retorne false e por ai segue o codigo dele, poderia me explicar o codigo dele, assim posso tentar entender a logica dele

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

Desafio 18

Oi, Cami, tudo bem?

No desafio 18 - "Verifique se todos os números da lista são iguais"

Eu gostaria de resolver esse desafio retornando uma lista apenas com os números que se repetem, porém, estou com dificuldades de chegar a essa resolução.
Poderia me ajudar?

Duvida no desafio 5

Desafio 05

Não sei como tirar a média com Stream API, a única coisa que consigo fazer é somar todos os valores.
Acredito que exista uma forma de fazer isso diretamente pelo Stream API, só não sei como :/

	List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 5, 4, 3);
	
	int media = numeros.stream()
			.reduce(0 , (n1, n2) -> n1 + n2);
	
	System.out.println(media);

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.