É o famoso foreach, ele percorre a lista que está a direita aos dois pontos item, por item, e atribui o objeto lido da lista a expressão da esquerda!
T
thingol
for(Declaracaovariavel:colecao){codigo}
é lido como:
“para cada item da coleção, atribuir esse item à variável, e executar o código entre chaves”.
F
fampinho
Valeu thiago pela força
abração
S
silveta
senão me engano foreach só “funfa” em Iterables e Arrays.
[]'s
Marky.Vasconcelos
silveta:
senão me engano foreach só “funfa” em Iterables e Arrays.
[]'s
E tem outro motivo pra usar?
T
thingol
As coleções do Java implementam Iterable (direta ou indiretamente), então normalmente é fácil de usar.
Por exemplo, para listar os pares chave-valor de um HashMap/TreeMap:
// Este código supõe que a classe Cliente tenha implementado corretamente o método toString()Map<String,Cliente>clientes=newTreeMap<String,Cliente>();for(Map.Entry<String,Cliente>entry:clientes.entrySet()){System.printf("Cliente %s: %s %n",entry.getKey(),entry.getValue());}
jcnaumann
Este é um recurso novo introduzido no J2SE 5.0 - Instrução “for” aprimorada:
Esta instrução itera pelos elementos de um array ou uma coleção sem utilizar um contador.
Deve ser lido da sequinte forma: -para cada iteração, atribui o próximo elemento de array a variável int number, depois executa a seguinte instrução.
Note porém que a instrução for aprimorada pode ser utilizada apenas para acesar elementos do array - ela não pode ser utilizada para modificar os elementos. Se seu programa precisar modificar elementos do array, utilize a instrução for tradicional controlada por contador.
Jean Carlos Naumann
lucianno
saudações a todos os discípulos de Gosling, se me permitem…
acredito que esse for foi introduzido na linguagem para otimizar recursos, seria isso mesmo??
mas olhando o .class gerado percebi que aparentemente o .class do for aprimorado ficou maior que o do for tradicional.
sendo assim pergunto:
nesse caso “tamanho é documento”, ou seja, o fato do arquivo do for aprimorado ser maior, quer dizer que em baixo nível ele se torna mais prolixo?
T
thingol
De certo modo é isso mesmo, mas isso é compensado tanto em tempo de manutenção (é bem mais fácil manter isso que um código com um monte de Iterators) quanto em tempo de execução (porque dá na mesma que você escrever os iterators).
peczenyj
Espero poder, no futuro, passar uma closure para um metodo each de um iterable
servicos.each( { T atual => resultado = perServico.salvar(tipoServicos, atual, ov, franquia } )
B
Bruno_Laturner
peczenyj:
Espero poder, no futuro, passar uma closure para um metodo each de um iterable
servicos.each( { T atual => resultado = perServico.salvar(tipoServicos, atual, ov, franquia } )
Espero que tenha. Ontem mesmo estava trabalhando com coleções, precisando de algo como um find ou collect… Ah se tivesse uma closure…
T
thingol
Bruno Laturner:
peczenyj:
Espero poder, no futuro, passar uma closure para um metodo each de um iterable
servicos.each( { T atual => resultado = perServico.salvar(tipoServicos, atual, ov, franquia } )
Espero que tenha. Ontem mesmo estava trabalhando com coleções, precisando de algo como um find ou collect… Ah se tivesse uma closure…
Isso é inveja de quem trabalha com .NET e usa LINQ
De fato, é muito nojento ter de percorrer uma coleção com “for” (mesmo que seja o “foreach”), quando isso poderia ser resolvido com “find”, “collect”, “each” e outros algoritmos.