Excluir registro de um Collection

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 ?

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);
		}

	}

}

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

[code]ClienteBean A = new ClienteBean();
A.setCliNome(“Eu”);
A.setCliEnd(“Ali”);

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

List clientes = new ArrayList();

clientes.add(A);
clientes.add(B);[/code]

No caso quero excluir um desses. Como ficaria ?

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.

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 ?

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.

[quote=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.
[/quote]

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.

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);

Tah legal. Vou testar. Obrigadão !

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