Pessoal no código abaixo há 2 for’s que fazem a mesma coisa. Qual deles vocês julgam ser melhor e o porquê de sua escolha. Há forma mais eficiente de fazer isso?
Meu objetivo é fazer uma consulta com a clausula ‘IN’ . Não sei quantos parâmetros virão no arrayList. Estou escrevendo a consulta assim select […] where nome_coluna IN ( ? ); substituindo a ? pela String juntarLista. Há outra forma melhor de fazer isso?
Neste caso é necessário dar prioridade a performance e segurança
Na verdade, as duas abordagens são equivalentes. Quando você escreve um for nesse estilo (for/each), o que ele faz é usar o iterator na hora da execução, ou seja, exatamente o que o seu segundo código faz!
Na verdade, as duas abordagens são equivalentes. Quando você escreve um for nesse estilo (for/each), o que ele faz é usar o iterator na hora da execução, ou seja, exatamente o que o seu segundo código faz!
for (Integer integer : lista) {
if (juntarLista.equals("")) {
juntarLista += integer;
} else {
juntarLista += ", " + integer;
}
}[/code]
a sua condição do if só vai ser verdadeira na primeira vez, então pra que testar em todas?
alternativa:
String juntarLista = lista.get(0);
for (Integer integer : lista) {
juntarLista += ", " + integer;
}
Quanto ao seu segundo código, geralmente utilizamos Iterator explicitamente quando queremos remover ítens da lista enquanto iteramos…
e você também está fazendo o teste desnecessariamente, pois esse if seu só vai ser falso na última iteração, então acaba sendo o mesmo teste desnecessário do primeiro for.
O for declarado desta maneira é parecido com um while (enquanto it.hasNext(), faça…). Seria o mesmo que:
Iterator<Integer> it = lista.iterator();
while (it.hasNext()) {
Integer integer = it.next();
...
}
então pra que testar mais uma vez dentro do laço se ele mesmo já faz isso?
String juntarLista = lista.get(0);
for (Integer integer : lista) {
juntarLista += ", " + integer;
}
então pra que testar mais uma vez dentro do laço se ele mesmo já faz isso?[/quote]
Desta forma o elemento 0 da lista não iria se repetir 2 vezes?
String juntarLista = lista.get(0);
for (Integer integer : lista) {
juntarLista += ", " + integer;
}
então pra que testar mais uma vez dentro do laço se ele mesmo já faz isso?[/quote]
Desta forma o elemento 0 da lista não iria se repetir 2 vezes?
juntarLista não ficaria equals("<item 0>, <item 0>, <item 1>, <item 2> …")?[/quote]
você está certo, não tinha me tocado disso… nesse caso o for teria que ser trocado por:
for (int i=1; i<lista.size(); i++) {
item = lista.get(i);
...
}
assim o for começa a contar do segundo ítem da lista…
E como você viu neste link, o uso de StringBuilder poder ser consideravelmente mais eficiente…