Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

1
resposta

Desafio Streams

**Exercício 1: **

package streams;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class Filter {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6);

        List<Integer> numerosPares = numeros.stream()
                .filter(numero -> numero % 2 == 0)
                .collect(Collectors.toList());

        System.out.println("Numeros pares: " + numerosPares);

    }
}

**Exercício 2: **

package streams;

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

public class ToUpperCase {
    public static void main(String[] args) {
        List<String> palavras = Arrays.asList("java", "stream", "lambda");
        palavras.stream()
                .map(palavra -> palavra.toUpperCase())
                .forEach(System.out::println);
    }
}

**Exercício 3: **

package streams;

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

public class FilterAndMult {
    public static void main(String[] args) {
        List<Integer> numeros = Arrays.asList(1, 2, 3, 4, 5, 6);
        numeros.stream()
                .filter(n -> n % 2 != 0)
                .map(n -> n * 2)
                .forEach(System.out::println);
    }
}

**Exercício 4: **

package streams;

import java.util.Arrays;
import java.util.List;
import java.util.Set;
import java.util.stream.Collectors;

public class Filter2 {
    public static void main(String[] args) {
        List<String> palavras = Arrays.asList("apple", "banana", "apple", "orange", "banana");
        Set<String> palavrasSemRepeticao = palavras.stream()
                .collect(Collectors.toSet());
        palavrasSemRepeticao.forEach(System.out::println);
    }
}

**Exercício 5: **

package streams;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class FlatMap {
    public static void main(String[] args) {
        List<List<Integer>> listaDeNumeros = Arrays.asList(
                Arrays.asList(1, 2, 3, 4),
                Arrays.asList(5, 6, 7, 8),
                Arrays.asList(9, 10, 11, 12)
        );

        List<Integer> numerosPrimosEmOrdem = listaDeNumeros.stream()
                .flatMap(List::stream)
                .filter(FlatMap::ehPrimo)
                .sorted()
                .collect(Collectors.toList());

        System.out.println(numerosPrimosEmOrdem);

    }
    private static boolean ehPrimo(int numero) {
        if(numero < 2) return false;
        for (int i = 2; i <= Math.sqrt(numero); i++) {
            if (numero % i == 0) {
                return false;
            }
        }
        return true;
    }
}

**Exercício 6: **

package streams.filter_sort;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class FilterAndSort {
        public static void main(String[] args) {
            List<Pessoa> pessoas = Arrays.asList(
                    new Pessoa("Alice", 22),
                    new Pessoa("Bob", 17),
                    new Pessoa("Charlie", 19)
            );

            List<Pessoa> pessoasDeMaior = pessoas.stream()
                    .filter(p -> p.getIdade()>=18)
                    .map(Pessoa::getNome)
                    .sorted()
                    .collect(Collectors.toList());

            System.out.println(pessoasDeMaior);

        }
    }

**Exercício 7: **

Classe Produto + :

import java.util.List;
import java.util.stream.Collectors;

public class FilterAndSort2 {
        public static void main(String[] args) {
            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")
            );
            List<Produto> produtosFiltrados = produtos.stream()
                    .filter(prod -> prod.getCategoria()=="Eletrônicos")
                    .filter(prod -> prod.getPreco() < 1000)
                    .sorted(Comparator.comparing(Produto::getPreco))
                    .collect(Collectors.toList());

            System.out.println("Produtos filtrados: " + produtosFiltrados);
        }
    }

**Exercício 8: **
Código Anterior + :

List<Produto> eletronicosPromo = produtosFiltrados.stream()
                    .limit(3)
                    .collect(Collectors.toList());

            System.out.println("Top 3 eletrônicos mais baratos: " + eletronicosPromo);
        }
    }
1 resposta

Boa noite, Luan! Tranquilo?

Gostei demais da sua solução, continue assim!

Mandou muito bem explorando o stream para manipulação de coleções com Java, aplicou de maneira eficiente o filter para selecionar elementos e entendeu como usar o map e o collect para transformar e agrupar resultados.

E um detalhe curioso para aprimorar seria utilizar o Comparator em diferentes cenários, como ordenar por múltiplos critérios. Exemplo:

List<Produto> produtosFiltrados = produtos.stream()
    .filter(prod -> prod.getCategoria().equals("Eletrônicos"))
    .filter(prod -> prod.getPreco() < 1000)
    .sorted(Comparator.comparing(Produto::getPreco).thenComparing(Produto::getNome))
    .collect(Collectors.toList());

Isso faz com que a ordenação seja mais flexível e detalhada.

Para aprimorar suas soluções, algumas boas práticas são:

  • Reuso de funções: extrair filtros e transformações para métodos auxiliares.
  • Imutabilidade: preferir coleções imutáveis para evitar alterações inesperadas.
  • Legibilidade: manter expressões stream curtas e claras para facilitar manutenção.

Continue postando as suas soluções! Além de ganhar pontos de XP na plataforma, você pode ajudar outros estudantes no fórum.

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

Ah, uma pergunta: o que você gostaria de praticar mais agora, criar pipelines de stream mais complexos com múltiplas operações ou explorar paralelismo com parallelStream para otimizar desempenho?

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

Abraço e bons estudos!

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