Remover Objetos do meu vetor pelo atributo ID

Estou tentando fazer um método que remova do meu vetor o Objeto Funcionário usando o seu Id, quero que retorne verdadeiro se funcionar e falso se não encontrar o Objeto.

Não estou sabendo como encontrar a posição do meu objeto usando o Id.

public boolean removerFuncionario(int id){
for(Funcionario f : this.funcionarios){
    if(d.getId() == id){
        this.funcionarios[] = null;
        return true;
    }else{
	return false;
	}
}

}

public boolean removerFuncionario(int id){
Funcionario f;
for(int i = 0; i<this.funcionarios.length; i++){
    f = this.funcionarios[i];
    if(f.getId() == id){
        this.funcionarios[i] = null;
        return true;
    }else{
	    return false;
	}
}
1 curtida

Remova esse else, pois o return vai interromper a iteração.

Coloque um return false; fora do for

1 curtida

this.funcionarios é o que? Um array? Um List?

Se for um array, você tem que iterar pelos índices:

public boolean removerFuncionario(int id) {
    for (int i = 0; i < this.funcionarios.length; i++) {
        Funcionario f = this.funcionarios[i];
        if (f.getId() == id) {
            this.funcionarios[i] = null;
            return true;
        }
    }
    return false;
}

E repare também que o return false fica fora do for. Se ele for colocado dentro, logo no primeiro elemento ele já vai retornar (independente do ID ser encontrado ou não) e irá ignorar os demais. Mas a ideia é retornar true somente se for encontrado. Para retornar false, você só saberá depois que o for terminar, por isso fica fora do loop.


Agora se for uma lista (List, ArrayList, etc), aí fica diferente:

public boolean removerFuncionario(int id) {
    Iterator<Funcionario> it = this.funcionarios.iterator();
    while (it.hasNext()) {
        Funcionario f = it.next();
        if (f.getId() == id) {
            it.remove();
            return true;
        }
    }
    return false;
}
1 curtida