Excluir registro de um Collection

9 respostas
laelsonc

Tenho uma sessão que contém uma Collection.

To tentando excluir determinado registro dessa sessão mas não to conseguindo,
veja a maneira que estou tentando:

Collection I = (Collection) session.getAttribute("ITENS");

     String s = (String)request.getParameter("itemPos");
     I.remove(Integer.parseInt(s));
...

Obs, estou considerando a posição do registro, a lista é composta de ObjetosBean.

Não faz nada.
Como seria ?

9 Respostas

danielbussade

Olá se essa sua Collection for um Set qualquer, não irá funcionar deste jeito, porque a interface Set, não indexa posições, você terá que passar o Objeto em si e não a posição dele.

Ex:

public class TesteR {

	public static void main(String[] args) {
		Set<String> lista = new HashSet<String>();
		lista.add("daniel");
		lista.add("guj");
		lista.add("jose");
		lista.add("maria");

		for (String string : lista) {
			System.out.println(string);
		}

		String s = "jose";
		lista.remove(s);
		System.out.println("\n#####Lista removida###");

		for (String string : lista) {
			System.out.println(string);
		}

	}

}
laelsonc

Foi o que pensei.
No meu caso tenho a seguinte situação.

ClienteBean A = new ClienteBean();
A.setCliNome("Eu");
A.setCliEnd("Ali");
...

ClienteBean B = new ClienteBean();
B.setCliNome("Voce");
B.setCliEnd("Aqui");
...

List<ClienteBean> clientes = new ArrayList<ClienteBean>(); 

clientes.add(A);
clientes.add(B);

No caso quero excluir um desses. Como ficaria ?

danielbussade

Neste seu caso com List, funcionaria da forma que você fez anteriormente, passando a posição:

lista.remove(2);

Só não funciona com Set, no caso do Set, ele vai excluir o objeto que você passar comparando com o metodo equals, da sua classe.

laelsonc

Tentei varias vezes mas não retira o item.
Tem mais alguma coisa ?

Como eu faria para no caso retirar da lista o elemento onde o cliNome fosse B.setCliNome(“Voce”) com equals ?

T

Você pode remover esse cliente pela posição se usar o método remove:

ArrayList.remove

Você pode remover esse cliente pelo valor se você definir um método “equals” para ClienteBean, mas aí você precisa passar uma instância de ClienteBean para o método remove, não uma string.

laelsonc

thingol:
Você pode remover esse cliente pela posição se usar o método remove:

ArrayList.remove

Você pode remover esse cliente pelo valor se você definir um método “equals” para ClienteBean, mas aí você precisa passar uma instância de ClienteBean para o método remove, não uma string.

Foi como falei. Tentei fazer como no exemplo acima mas não consegui. Ele não tira nada da Array.
Tem como vc fazer um exemplo criando esta instancia ai ?

Obrigado.

danielbussade

Olá, o que você não está entendendo é o seguinte, o metodo remove da interface collection implementado pela interface list que extends Collection, pede um int, ou um Object, este object que você vai passar ele vai andar na lista invocando o metodo equals da classe que esta na lista, no seu caso ClienteBean, então para funcionar teria que fazer assim:

ClienteBean A = new ClienteBean();
A.setCliNome("Eu");

ClienteBean B = new ClienteBean();
B.setCliNome("Voce");

List<ClienteBean> clientes = new ArrayList<ClienteBean>(); 

clientes.add(A);
clientes.add(B);

//Para remover você pode passar a posição como por exemplo
cliente.remove(1);

//Ou o objeto que representa este cliente, que o metodo remove ira comparar usando o equals da classe
cliente.remove(B);
laelsonc

Tah legal. Vou testar. Obrigadão !

W

Pessoal, o meu caso é o seguinte, estou fazendo um pequeno “programa” que insere Empregados em uma ArrayList, vejam o método main:

public class TesteEmpregado {
    
    public static void main (String args []) {
        
        Scanner s = new Scanner (System.in);
        System.out.println("Quantos Empregados deseja adicionar? ");
        int n = s.nextInt();
        
        ArrayList list = new ArrayList ();
        
        cadastrar(list, n);
        
        Iterator it = list.iterator();
        
        while (it.hasNext())
            
            System.out.println (it.next());
                
        
        
            
        }
    
    public static void cadastrar (ArrayList al, int n) {
        
        Scanner s = new Scanner (System.in);
        
        for (int i = 0; i < n; i++) {
        
            System.out.println (" --- CADASTRO DE EMPREGADOS --- \n");
        
            System.out.println ("Digite o NOME do Empregado: ");
            String nome = s.next();
            System.out.println ("Digite o RG do Empregado: ");
            int rg = s.nextInt();
            System.out.println ("Digite o SALÁRIO do Empregado: ");
            double sal = s.nextDouble();
            System.out.println ("Empregado é Gerente? S ou N: ");
            String opt = s.next();
        
            if (opt.equalsIgnoreCase("N")) {
                        
            al.add(new Empregado (nome, rg, sal));
            
            }
        
            else {
                System.out.println("Digite o BÔNUS do Gerente: ");
                double bonus = s.nextDouble();
                al.add(new Gerente (nome, rg, sal, bonus));
            }
        
        }
            
    }

Ok, até aí tudo certo, mas quero também implementar um método excluir e um método editar, mas não sei bem como fazer isso. Alguém pode me dar uma luz? Quais parâmetros os métodos excluir e editar vão receber? Como seria a implementação? Algo bem resumido que me dê uma idéia./

Agradeço

Criado 13 de outubro de 2008
Ultima resposta 2 de nov. de 2008
Respostas 9
Participantes 4