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)