1
resposta

.

1)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(10, 20, 30, 40, 50);
        
        // Passo 1: Transforma a lista em stream
        // Passo 2: Usa max() para encontrar o maior
        // Passo 3: get() pega o valor (Optional)
        int maior = numeros.stream().max(Integer::compare).get();
        
        System.out.println("Maior: " + maior); // Saída: 50
    }
}

2)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<String> palavras = Arrays.asList("java", "stream", "lambda", "code");
        
        // Passo 1: Transforma em stream
        // Passo 2: Agrupa usando o tamanho da string como chave
        Map<Integer, List<String>> resultado = palavras.stream()
            .collect(Collectors.groupingBy(String::length));
        
        System.out.println(resultado); // Saída: {4=[java, code], 6=[stream, lambda]}
    }
}

3)
import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<String> nomes = Arrays.asList("Alice", "Bob", "Charlie");
        
        // Passo 1: Transforma em stream
        // Passo 2: Junta os elementos com ", " entre eles
        String resultado = nomes.stream().collect(Collectors.joining(", "));
        
        System.out.println(resultado); // Saída: Alice, Bob, Charlie
    }
}

4)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6);
        
        // Passo 1: Filtra apenas pares
        // Passo 2: Eleva ao quadrado
        // Passo 3: Soma tudo
        int soma = numeros.stream()
            .filter(n -> n % 2 == 0)
            .map(n -> n * n)
            .reduce(0, Integer::sum);
        
        System.out.println("Soma: " + soma); // Saída: 56 (4 + 16 + 36)
    }
}

5)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6);
        
        // Passo 1: Particiona em true (pares) e false (ímpares)
        Map<Boolean, List<Integer>> grupos = numeros.stream()
            .collect(Collectors.partitioningBy(n -> n % 2 == 0));
        
        System.out.println("Pares: " + grupos.get(true));   // [2, 4, 6]
        System.out.println("Ímpares: " + grupos.get(false)); // [1, 3, 5]
    }
}

6)

import java.util.*;

public class Main {
    public static void main(String[] args) {
        List<Produto> produtos = Arrays.asList(
            new Produto("Teclado", 200.0, "Eletrônicos"),
            new Produto("Cadeira", 300.0, "Móveis")
        );
        
        // Passo 1: Agrupa usando a categoria como chave
        Map<String, List<Produto>> porCategoria = produtos.stream()
            .collect(Collectors.groupingBy(Produto::getCategoria));
        
        System.out.println(porCategoria);
    }
}

7)

// Continuando com a lista de produtos...

// Passo 1: Agrupa contando os elementos de cada categoria
Map<String, Long> contagem = produtos.stream()
    .collect(Collectors.groupingBy(
        Produto::getCategoria, 
        Collectors.counting()
    ));

System.out.println(contagem); // Ex: {"Eletrônicos"=3, "Móveis"=2}

8)
// Continuando com a lista de produtos...

// Passo 1: Agrupa encontrando o máximo por preço em cada categoria
Map<String, Optional<Produto>> maisCaros = produtos.stream()
    .collect(Collectors.groupingBy(
        Produto::getCategoria,
        Collectors.maxBy(Comparator.comparing(Produto::getPreco))
    ));

maisCaros.forEach((cat, prod) -> 
    System.out.println(cat + ": " + prod.get().getNome()));
    
9)

// Continuando com a lista de produtos...

// Passo 1: Agrupa somando os preços por categoria
Map<String, Double> totais = produtos.stream()
    .collect(Collectors.groupingBy(
        Produto::getCategoria,
        Collectors.summingDouble(Produto::getPreco)
    ));

System.out.println(totais); // Ex: {"Eletrônicos"=1900.0, "Móveis"=1000.0}
1 resposta

Oi, Eleazar! Tudo bom?

Excelente! Siga praticando com os desafios e sempre compartilhe conosco.

Você soube aplicar Streams de forma eficiente para resolver diferentes problemas com coleções, aproveitou o Collectors.groupingBy para categorizar dados de maneira elegante e entendeu como o uso de métodos como max, joining e partitioningBy é essencial para tornar o código mais declarativo.

Permaneça postando as suas soluções, com certeza isso ajudará outros estudantes e tem grande relevância para o fórum.

Ícone de sugestão Para saber mais:

Sugestão de conteúdo para você mergulhar ainda mais sobre o tema:

Alguns materiais estão em inglês, mas é possível compreendê-los usando o recurso de tradução de páginas do próprio navegador.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

AluraConte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!