Boa noite.
Tenho um ArrayList com 30 elementos e gostaria de varrer esse array de três em três.
Exemplo: Leio os primeiros 3 elementos na primeira execução do laço (em cima desses 3 farei uma execução que preciso),leio os 3 próximos elementos na segunda execução do laço e assim por diante até chegar aos 30.
Não sei se seria interessante ir limpando a lista cada vez que leio os 3 elementos corrente!
Se alguém puder me ajudar agradeço!
PS: Meu array tem muito mais que 30, coloquei esse valor só pra ficar mais fácil de entender.
O tamanho final será sempre múltiplo de 3? Ex: 30, 33, 36, 48, 120, 300.
Se sim, basta fazer um for incrementando de 3 em 3. Algo assim:
int total = arrayListComDados.size();
for( int i = 0; i < total; i+=3){ // note o += 3
ElementoDoArray elemento1 = arrayListComDados(i); // vai acessar o elemento na posição i (ex: 0, 3, 6 )
ElementoDoArray elemento2 = arrayListComDados(i+1); // vai acessar o elemento na posição i + 1 (ex: 1, 4, 7)
ElementoDoArray elemento3 = arrayListComDados(i+2); // vai acessar o elemento na posição i + 2 (ex: 2, 5, 8)
// aqui você faz o que quiser com as variáveis elemento1, elemento2 e elemento3
}
Abraço.
Opah, não será TerraSkilll, o tamanho é variável! Ai tenho pego muito “array of bound exception”;
obrigado pela força.
E o que você faz quando sobram 1 ou 2 elementos? Ex: 7, 8, 13, 95 elementos? O que deve acontecer nesse caso?
Abraço.
1 curtida
Como o TerraSkill comentou existe um problema em percorrer 3 em 3 quando a quantidade da lista seja variavel, seria interessante validar essa opcao, por exemplo ir percorrendo a lista 3 em 3 , mas caso a array por algum motivo tenho menos que tres elementos ele passe a percorrer 1 em 1.
igoralves - é mais realmente pra mim seria de 3 em 3 registros!
Estava estudando sobre como implementar um Iterator, talvez acho que so assim eu resolvo essa minha necessidade, mas ta tresh!
Valews
Você ainda não explicou o que acontece se a quantidade de registros não for múltipla de 3, o que dificulta sugerir outras opções. Ou a lista inteira só é processada caso o total de elementos seja múltiplo de 3, e é preciso garantir isso antes de iniciar o processamento?
Ex: se tem 4 elementos, os elementos 1, 2 e 3 serão processados em conjunto. Mas o que acontece com o elemento 4? Ele é processado sozinho? Ou não é processado? É preciso emitir alguma mensagem pro usuários? Ou são criados elementos “vazios” (5 e 6) para serem processados junto com o 4?
Cada uma dessas opções leva a respostas diferentes, então explique o que precisa acontecer nesse caso.
Abraço.
É assim, eu estou consultando um webservice que me da 1 consulta a cada minuto, sendo que nessa consulta eu posso pesquisar até 3 registros, criei um task pra isso! Starta o método a cada 1:10 pra não ter erro.
Porém, se eu fizer 3 por minuto eu vou demorar 22:33hrs pra atualizar todos os meus cadastros, se eu fizer 1 por minuto ( facilita pra mim ) vou demorar quase 3 dias.
Então em tenho uma lista e quero ir consultando de 3 em 3, se possível eu ate removo esse Clientes depois de consultados.
Respondendo sua pergunta, caso fossem 4 elementos o quarto seria processado sozinho.
Bom, então, primeiramente, você precisa garantir que a sua função que faz a consulta é capaz de operar com 2 ou 1 elemento, passando parâmetros vazios ou nulos para as posições não preenchidas.
Supondo que você já fez isso, é só o caso de verificar, no seu laço, se a posição a ser passada para a função existe ou não. Algo assim:
for( int i = 0; i < total; i+=3){ // note o += 3
ElementoDoArray elemento1 = arrayListComDados(i);
ElementoDoArray elemento2 = null;
ElementoDoArray elemento3 = null;
if (i + 1 < total) {
ElementoDoArray elemento2 = arrayListComDados(i+1);
}
if (i + 2 < total) {
ElementoDoArray elemento3 = arrayListComDados(i+2);
}
metodoQueFazAConsulta(elemento1, elemento2, elemento3);
}
private void metodoQueFazAConsulta(ElementoDoArray e1, ElementoDoArray e2, ElementoDoArray e3){
// antes de fazer a consulta, você verifica se os parâmetros são nulos
}
Obviamente, podem ser feitas otimizações, como passar uma lista para o método de consulta. Mas acho que dá pra entender a ideia.
PS: fiz o código de cabeça, podem ser necessários alguns ajustes.
Abraço.
Obrigado pela força pessoal! Não consegui fazer da forma que gostaria, mas tive outra ideia aqui via banco e ta indo de 3 em 3
.
abs