Esta é uma coleção de exercícios práticos para dominar a Java API Streams, focando nas principais interfaces funcionais e suas aplicações em processamento de dados.
- Compreender e aplicar as principais interfaces funcionais do Java 8+;
- Dominar operações de Stream para manipulação de coleções;
- Desenvolver habilidades em programação funcional com Java;
- Praticar cenários reais de processamento de dados;
Consumer - Exercícios focados em consumo e processamento de dados
- Consumer : Representa uma operação que aceita um argumento do tipo T e não retorna nenhum resultado. É utilizada principalmente para realizar ações ou efeitos colaterais nos elementos do Stream sem modificar ou retornar um valor.
Supplier - Exercícios de fornecimento e geração de dados
- Supplier : Representa uma operação que não aceita nenhum argumento e retorna um resultado do tipo T. É comumente usada para criar ou fornecer novos objetos de um determinado tipo.
Function - Exercícios de transformação e mapeamento
- Function <T,R>: Representa uma função que aceita um argumento do tipo T e retorna um resultado do tipo R. É utilizada para transformar, ou mapear os elementos do Stream em outros valores, ou tipos.
Predicate - Exercícios de filtragem e validação
- Predicate : Representa uma função que aceita um argumento do tipo T e retorna um valor booleano (verdadeiro oufalso). É comumente usada para filtrar os elementos do Stream com base em alguma condição.
BinaryOperator - Exercícios de operações binárias
- BinaryOperator <T,T,T>: operação que combina dois argumentos do tipo T e retorna um resultado do mesmo tipo T. É usada para realizar operações de redução em pares de elementos, como somar números ou combinar objetos.
- BiFunction - Exercícios com funções de dois parâmetros
- UnaryOperator - Exercícios de operações unárias
- Comparator - Exercícios de ordenação personalizada
- Java 8+ (Streams API)
- IDE (IntelliJ IDEA, Eclipse, VS Code ou qualquer editor)
- Clone o repositório
git clone [url-do-repositorio]
- Navegue até o diretório do projeto
cd java-streams-exercises
Abra o projeto em sua IDE favorita e execute!
Consumer/
├── br/
│ └── com/
│ └── consumer/
│ ├── Names.java
│ ├── NamesExp.java
│ ├── Product.java
│ └── ProductConsumer.java
├── Consumer_README.md
├── Main.java
└── README.md
... demais pacotes
Cada pasta de exercícios contém:
- README.md principal: Explicação geral do conceito (Consumer, Supplier, etc.)
- Enunciados detalhados: Objetivos específicos de cada exercício
- Dicas de implementação: Orientações para resolver os exercícios
- Comece pelo básico: Entenda bem cada interface funcional antes de avançar
- Pratique regularmente: Resolva alguns exercícios diariamente
- Tente resolver sozinho: Tente resolver antes de olhar a resposta. Pode-se criar novas classes ou pacotes.
- Experimente: Tente diferentes abordagens para o mesmo problema
- Leia a documentação: Consulte a documentação oficial do Java para entender melhor
- Fork este repositório
- Clone seu fork para sua máquina local
git clone https://github.com/SEU-USERNAME/java-streams-exercises.git
- Crie uma branch para sua contribuição
git checkout -b feature/nova-funcionalidade
# ou
git checkout -b fix/correcao-bug
- Faça suas alterações e commits
git add .
git commit -m "feat: adiciona exercícios de BiPredicate"
- Push para sua branch
git push origin feature/nova-funcionalidade
- Abra um Pull Request descrevendo suas alterações
- Exercícios básicos: Para iniciantes em Streams
- Exercícios avançados: Combinando múltiplas interfaces funcionais
- Exercícios do mundo real: Casos práticos de uso empresarial
- Exercícios de performance: Comparando abordagens tradicionais vs Streams
- Refatoração de soluções existentes
- Otimização de performance
- Adição de comentários explicativos
- Melhoria na legibilidade do código
- Tradução para outros idiomas
- Exemplos adicionais
- Guias de melhores práticas
- Explicações mais detalhadas
- Validação manual dos exercícios
- Testes com diferentes cenários de entrada
- Verificação de outputs esperados
feat:
para novas funcionalidadesfix:
para correções de bugsdocs:
para mudanças na documentaçãotest:
para adição/modificação de testesrefactor:
para refatoração de código
- ✅ Código compilável e executável
- ✅ Funcionalidade testada manualmente
- ✅ Documentação adequada
- ✅ Seguir padrões de código Java
- ✅ Exercícios com níveis de dificuldade apropriados
Autor(a): Caroline 💙
Licença : License MIT