0
respostas

[Projeto] Desafios

Olá!

Seguem minhas resoluções:

package br.com.alura.exercicios;

import java.util.*;
import java.util.stream.Collectors;

public class Main {
    public static void main(String[] args) {

        //1 - Dada a lista de números inteiros a seguir, encontre o maior número dela.

        List<Integer> numeros = Arrays.asList(10, 20, 30, 40, 50);
        numeros.stream()
                .sorted()
                .toList()
                .reversed()
                .stream()
                .limit(1)
                .forEach(System.out::println);

// 2 -Dada a lista de palavras (strings) abaixo, agrupe-as pelo seu tamanho.
// No código a seguir, há um exemplo prático do resultado esperado.

        List<String> palavras = Arrays.asList("java", "stream", "lambda", "code");
       Map <Integer, List<String>> grupoPalavras =  palavras.stream()
                       .collect(Collectors.groupingBy(String::length));
        System.out.println(grupoPalavras);

        //3 - Dada a lista de nomes abaixo, concatene-os separados por vírgula.
        // No código a seguir, há um exemplo prático do resultado esperado.

        List<String> nomes = Arrays.asList("Alice", "Bob", "Charlie");

        String nomesConcatenados = nomes.stream()
                .collect(Collectors.joining(", "));

        System.out.println(nomesConcatenados);

        //4 - Dada a lista de números inteiros abaixo,
        // calcule a soma dos quadrados dos números pares.

        List<Integer> numerosQuadrados = Arrays.asList(1, 2, 3, 4, 5, 6);

       int somaQuadrados =  numerosQuadrados.stream()
                .filter(q -> q % 2 == 0)
                .map(q -> q * q)
                .reduce(0,(totaL, numero) -> totaL + numero);

        System.out.println(somaQuadrados);

        //5 - Dada uma lista de números inteiros, separe os números pares dos ímpares.

        List<Integer> numerosSeparar = Arrays.asList(1, 2, 3, 4, 5, 6);

       Map<Boolean, List<Integer>> listasSeparadas =  numerosSeparar.stream()
                .collect(Collectors.groupingBy(s -> s % 2 == 0));

       List<Integer> pares = listasSeparadas.get(true);
       List<Integer> impares = listasSeparadas.get(false);

        System.out.println("Lista de números pares: " + pares);
        System.out.println("Lista de números ímpares: " + impares);

List<Produto> produtos = Arrays.asList(
            new Produto("Smartphone", 800.0, "Eletrônicos"),
            new Produto("Notebook", 1500.0, "Eletrônicos"),
            new Produto("Teclado", 200.0, "Eletrônicos"),
            new Produto("Cadeira", 300.0, "Móveis"),
            new Produto("Monitor", 900.0, "Eletrônicos"),
            new Produto("Mesa", 700.0, "Móveis")
        );

//6 - Dada a lista de produtos acima, agrupe-os por categoria em um Map<String, List<Produto>>.
Map<String, List<Produto>> agrupadoCategoria = produtos.stream()
        .collect(Collectors.groupingBy(Produto::getCategoria));

        System.out.println(agrupadoCategoria);

        //7 - Dada a lista de produtos acima,
        // conte quantos produtos há em cada categoria e armazene em um Map<String, Long>.

        Map<String, Long> contagemProdutos = produtos.stream()
                .collect(Collectors.groupingBy(Produto::getCategoria,
                        Collectors.counting()));

        System.out.println(contagemProdutos);

//8 - Dada a lista de produtos acima, encontre o produto mais caro de cada categoria e armazene o resultado em um Map<String,
// Optional<Produto>>.

        Map<String, Optional<Produto>> produtoMaisCaro = produtos.stream()
                .collect(Collectors.groupingBy(Produto::getCategoria,
                        Collectors.maxBy(Comparator.comparingDouble(Produto::getPreco))));

        System.out.println(produtoMaisCaro);

//9 - Dada a lista de produtos acima, calcule o total dos preços dos produtos em cada categoria e armazene o resultado em um Map<String, Double>.
        Map<String, Double> somaValores = produtos.stream()
                .collect(Collectors.groupingBy(Produto::getCategoria,
                        Collectors.reducing(0.0,Produto::getPreco,Double::sum)));

        System.out.println(somaValores);


         }
}