Cap4 - Mais um novo método em Collection: removeIf
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 predicado = new Predicate() { 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. 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.

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
predicado = new Predicate () {
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.
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.