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