- Além do forEach, a interface Collection ganhou o método removeIf. 
- O removeIf recebe um Predicate, uma interface funcional usada para testar objetos de um determinado tipo. 
- Remove todos os elementos da coleção para os quais o Predicate retorna true. 
Exemplo:
- Com classe anônima: 
 - Predicate<Usuario> predicado = new Predicate<Usuario>() {
 public boolean test(Usuario u) {
 return u.getPontos() > 160;
 }
 };
 usuarios.removeIf(predicado);
- Com expressão lambda (forma mais concisa): 
 - usuarios.removeIf(u -> u.getPontos() > 160);
- A coleção deve ser mutável (ArrayList e não Arrays.asList). Caso contrário, ocorre uma UnsupportedOperationException. 
Vantagens e Restrições do Uso de Lambdas
Vantagens:
- Código mais enxuto e legível. 
- Evita a necessidade de criar classes anônimas verbosas. 
Restrições:
- Lambdas não podem ter atributos próprios (não armazenam estado interno). 
- Em alguns casos, o uso de uma classe anônima pode ser necessário. 
Outros Métodos Novos em Map
- Map também recebeu métodos úteis para simplificar código: computeIfPresent, computeIfAbsent, getOrDefault, etc. 
- Esses métodos reduzem a necessidade de escrever código repetitivo para manipular mapas. 
Métodos Default e Herança Múltipla
1 Objetivo dos Métodos Default
- Foram adicionados para permitir a evolução de interfaces sem quebrar código existente. 
- Não foram criados para herança múltipla ou mixins (permite modificar o código em tempo de execução). 
2 Restrições dos Métodos Default
- Não podem acessar atributos de instância, pois interfaces não possuem estado. 
- Não há herança múltipla real no Java 8, apenas compartilhamento de comportamento. 
3 Impacto e Trade-offs
- O uso de métodos default aumenta o acoplamento. 
- As restrições do Java 8 evitam problemas comuns da herança múltipla em outras linguagens. 
- Como todo recurso, há vantagens e desvantagens a serem consideradas. 
 

 
    
Top comments (0)