Um recurso muito presente em desenvolvimento web e a iteração dentro de listas com o laço for.Esse artigo vai dar uma boa base pra que está precisando usar estes componentes mas não domina muito o assunto.
Neste tutor iremos focar nas classes que implementa List (ArrayList ) pois possui um desempenho melhor para a iteração(acesso a todos os objetos) que outras, porém o conteúdo aqui abordado serve perfeitamente para os Set's que são muito semelhantes ao List, com a diferença que não permitem item duplicados, e são mais lentos para iteração, porém mais rápido para inserção e remoção de itens.
Listas servem para eu adicionar vários atributos, para que eu possa manipula-los depois, seja gerar um relatório, salvar no banco de dados, ou mostra na tela, etc.A declaração de um ArrayList e:
ArrayList<Tipo> Nome= new ArrayList<Tipo>();
exemplo:
ArrayList<String> Nomes = new ArrayList<String>();
ArrayList<Clientes> listClientes = new ArrauList<Clientes> ();
E muito comum vermos a seguinte declaração:
List<Tipo> nomeDalista = new ArrayList<Tipo>();
Ao fazer isso estamos criando um objeto polimórfico, já que a classe ArrayList e filha( implemtenta) da interface List, sendo assim a declaração acima também e válida.
Os principas métodos da classe ArrayList são:
add(Object o) - Adicionar um item
remove(Object o) - Remove um item, pelo indice, ou pela referência do objeto
size() - Retorna o número de itens da lista
get(int index) - Recebe um número e retorna o objeto no indice informado.
contains(Object o ) - Retorna true caso o objeto passado exista, e false caso contrario .
indexOf(Object o) - Retorna o indice de um objeto informado.
Suponhamos que eu tenha uma classe chamada Produto, de um site de vendas, e toda vez que o usuario adicionar um produto ao carrinho, eu vou colocar esse produto em uma lista(ArrayList ), para depois poder mostrar para o usuário os produtos antes de finalizar a compra, sendo assim, eu poderia ter o seguinte List,
List<Produto> carrinhoDeCompras = new List<Produto>();
Para adicionar um produto a lista use o comando:
carrinhoDeCompras.add(p).
Para remover um produto, podemos usar o índice, ou a referência do produto. ex.:
Quando soubermos o indice podemos usar:
carrinhoDeCompras.remove(0);
Quando tivermos o objeto a ser removido podemos usar :
carrinhoDeCompras.remove(myProduct);
Mas e quando não soubermos o índice do objeto?
Podemos usar o método indexOf para descobrir o indice, e depois usar o método Get para obter o elemento. Ex. Suponhamos que eu tenho um produto:
Produto myProduct = new Produto("Computador",1800,"DELL");
Primeiro eu verifico se o produto existe:
boolean isProduct = carrinhoDeCompras.contains( MyProduct);
Depois deste teste a variável isProduct, vai ser true, e o produto existir , e false se ele não existir. Sendo assim eu posso usar a seguinte condicional:
if (isProduct){
int indice = carrinhoDeCompras.indexOf(myProduct);//Descubro o indice do produto.
Produto selectProduct = carrinhoDeCompras.get(i);
}
else
System.out.println("Produto não cadastrado.");
Difícil ?Olhando superficialmente, você pode não entender para que isso vai servir na prática, mas em uma situação real, esse código poderia servir caso você quisesse avisar ao seu cliente quando ele adicionar produtos repetidos ao carrinho para ele não compre produtos repetidos.
Para ficar ainda mais aplicável vamos criar um método que identifica o produto, e se o produto já existir retorna uma menssagem de advertencia, se não, adicionar o produto a lista, e retorna uma menssagem de confirmação.
public String verificarProutoExiste(Produto myProduct) {
boolean isProduct = carrinhoDeCompras.contains( myProduct);//verifico se o produto existe
if (isProduct){//se o produto ja existe, retorno uma menssagem
return "Você já adicionou este produto ao carrinho!";
}
else { //Se não, adicionamos o produto a lista, e retornamos a menssagem de confirmação
carrinhoDeCompras.add(p);
return "Produto adicionado com sucesso!" ;
}
}
E por ultimo, para remover um item de uma lista, usamos o método remove(), com a seguinte sintaxe:
Quando já sabemos o indice:
carrinhoDeCompras.remove(0);
Quando temos o objeto a ser removido:
carrinhoDeCompras.remove(myProduct);
Usando foreach, uma laço for aperfeiçoado.
Depois de ter adicionado todos esses produtos, em algum momento eu posso precisar mostrar todos eles na tela, ou fazer qualquer outra operação envolvendo todos os itens desta lista, podemos fazer isso de forma simples usando um laço For "each" que e um aprimoramento do laço contado, onde vamos manipular individualmente cada um dos itens da lista, sem precisar usar aquele famoso(tem gente que acha ele chato ) i, que representa o índice do item atual.
Sintaxe:
for (TipoObjeto Variavel: MinhaLista ){
Seu código ...
}
Confuso? Vamor por partes então:
for - Palavra chave que representa o laço, tem que tem e pronto...
TipoObjeto - E a referencia do objeto atual, esse cara representa um dos objetos da lista. E só um container temporario para um dos itens da lista.
MinhaLista - A lista que queremos manipular.
Vamos ver como usaríamos isso no nosso carrinhoDeCompras:
Suponhamos que nós temos os seguintes produtos na lista carrinhoDeCompras:
Produto computador = new Produto("Desktop", 1200,"Toshiba" );
Produto TV = new Produto("TV Led", 1500,"LG" );
Produto HD = new Produto("HD Sata III", 600,"Seagate" );
O laço ficaria da seguinte maneira:
for (Produto p: carrinhoDeCompras ) {
System.out.println(" Nome do produto: "+p.getNome() ):
System.out.println(" Valor do produto: "+p.getValor() ):
System.out.println(" Fabricante : "+p.getFabricante() ):
}
Agora vamos ao teste de Mesa:
1º linha - Produto p recebe o carrinhoDeCompras no indice 0, ou seja computador
2º linha - Imprimimos o atributo nome do objeto computador que é: Desktop
3º linha - Imprimimos o atributo valor do objeto computador que é: 1200
4º linha - Imprimimos o atributo Fabricante do objeto computador que é: Toshiba
5º linha - Produto p recebe o carrinhoDeCompras no indice 1, ou seja TV -
6º linha - Imprimimos o atributo nome do objeto TV que é: TV Led
7º linha - Imprimimos o atributo valor do objeto TV que é: 1500
8º linha - Imprimimos o atributo Fabricante do objeto TV que é: LG
9º linha - Produto p recebe o carrinhoDeCompras no indice 2, ou seja HD
10º linha - Imprimimos o atributo nome do objeto HD que é: HD Sata III
11º linha - Imprimimos o atributo valor do objeto HD que é: 600
12º linha - Imprimimos o atributo Fabricante do objeto HD que é: Seagate.
Bom acho que agora deu pra ver como e fácil(Sei que você está pensando: fácil pra tu que já sabe !!!! )
usar listas com o laço "foreach", faça próprios teste e tente exercitar um pouco pois o domínio da ferramenta só vem com uma boa prática.
Perfeito, uma das melhores explicações de foreach que já vi pela internet! Parabéns
ResponderExcluir