…estou estudando Java…dúvidas “lógica”…
Quando sei que é preciso usar um for em um arrayList de objetos?
…estou estudando Java…dúvidas “lógica”…
Quando sei que é preciso usar um for em um arrayList de objetos?
Oi, bom dia!
Você usa um loop for em um ArrayList por vários motivos:
[list]quando deseja recuperar um objeto da lista por seu atributo.[/list][list]quando deseja percorrer todos os objetos e recuperar atributos.[/list][list]etc…[/list]
Exemplo 1
//recuperar um objeto da lista por seu atributo
public Cliente getClientePorCPF( String cpf ) {
for (Cliente cli : listaClientes) { //no exemplo: listaClientes é um ArrayList <Cliente>, ou seja uma lista utilizando Generics
if (cli.getCpf().equals(cpf))
return cli;
}
}
Exemplo 2
//detectar objetos Pedidos onde estejam com pendência de entrega
public ArrayList getPedidosPendentes( ) {
ArrayList pedidosPendentes = new ArrayList();
for (int i = 0; i < listaPedidos.size(); i++) { //listaPedidos é um ArrayList comum
Pedido pedido = (Pedido) listaPedidos.get(i);
if (pedido.isPendente() == true)
pedidosPendentes.add(pedido);
}
return pedidosPendentes;
}
Qual a diferença?
for (Cliente cli : listaClientes){}
de
for (; i++) {}int i = 0; i < listaPedidos.size()
O primeiro for é chamado de for otimizado e geralmente é utilizado para percorrer Arrays, já o segundo pode ser utilizado pra todo e qualquer tipo de repetição.
No primeiro for você não sabe em qual repetição você está… 
(por mais que é fácil implementar isso através de uma variável)
for (Cliente cli : listaClientes){}
esse for é mais fácil de entender mesmo não sabendo em qual posição está...
for (Cliente cli : listaClientes) { //no exemplo: listaClientes é um ArrayList <Cliente>, ou seja uma lista utilizando Generics if (cli.getCpf().equals(cpf)) return cli; } }
duvida ++;
....Por que usou o if dentro do for??? no meu entendimento usou o if para verificar se o CPF são iguais para cada cliente da lista??? minha reposta é true ou false?
Esse funciona assim:
Olhe todos os clientes da listaClientes e veja se o cpf deles é igual a xxx.xxx.xxx-xx, se for igual, retorne esse cliente 
É exatamente isso que está escrito acima...for (Cliente cli : listaClientes) {//Para cada elemento do conjunto 'listaClientes' insira o próximo elemento no objeto do tipo Cliente 'cli' if (cli.getCpf().equals(cpf)) //Se, a variável CPF desse elemento for igual a CPF return cli; //Retorne esse cliente } }
Obrigada pelas respostas, ajudou a esclarecer minhas dúvidas!
Tenho uma curiosidade sobre o for, não quis iniciar outro tópico aproveitei o assunto aqui:
seguinte, tenho 2 laços for, no incremento um utilizo pre-incremento e no outro pos-incremento, só que a saída é a mesma nos dois casos,
tenho minha opnião mas gostaria de outras para ter exclarecimento.
segue o código:
public class Bunnies {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.print(i + " ..");
}
for (int i = 0; i < 3; ++i) {
System.out.print(i + " ..");
}
}
}
os dois tem a saída:
0 ..1 ..2 ..
0 ..1 ..2 ..
acho melhor o for tradicional