final Collection<String> nomes = new ArrayList<>();
nomes.add("João");
nomes.add("Paulo");
nomes.add("Ana");
nomes.add("Leonardo");
nomes.forEach(nome -> {
if(nome.matches("Leonardo")){
nomes.remove(nome);
}
});
final Collection<String> nomes = new ArrayList<>();
nomes.add("João");
nomes.add("Paulo");
nomes.add("Ana");
nomes.add("Leonardo");
nomes.forEach(nome -> {
if(nome.matches("Leonardo")){
nomes.remove(nome);
}
});
Olá Leonardo,
No meu ponto de vista você pode resolver esse problema de duas maneiras:
1) Criar uma nova lista contendo os elementos que você quer tirar da lista principal e depois do loop remove-los da lista.
ou 2) Usar o Iterator da lista para navegar por ela e então usar o método 'remove()' para remover aquele objeto da lista.
Eu adaptei seu código um pouco para exemplificar os dois exemplos abaixo:
// #1
Collection<String> nomes = new ArrayList<>();
nomes.add("João");
nomes.add("Paulo");
nomes.add("Ana");
nomes.add("Leonardo");
List<String> nomesParaRemover = new ArrayList<>(nomes.size());
nomes.forEach(nome -> {
if(nome.matches("Leonardo")){
nomesParaRemover.add(nome);
}
});
nomes.removeAll(nomesParaRemover);
// ou
//#2
nomes = new ArrayList<>();
nomes.add("João");
nomes.add("Paulo");
nomes.add("Ana");
nomes.add("Leonardo");
Iterator<String> iterator = nomes.iterator();
while (iterator.hasNext()) {
if(iterator.next().matches("Leonardo")){
iterator.remove();
}
}
Eu acredito que a segunda maneira seja mais eficiente, mas não sei dizer como o iterator realiza a remoção por baixo dos panos, então fica ai algo interessante para pesquisar!
Espero ter ajudado! Um abraço!