Como Reiniciar um Looping em um Iterator?

5 respostas
J
Preciso que durante uma interação o looping seja reiniciado, o motivo é porque tem uma quantidade que procuro em um intervalo e dependendo de onde ela é encontrada ela deve ser dobrada e feita a busca novamente, porém agora buscando a quantidade dobrada (x2). Não sei como fazer novamente para meu Itetator reiniciar.
while(itQuantidades.hasNext()){
    QuantidadeOrcamento item = itQuantidades.next();
    double quantidadeProcurar = item.getQuantidadeOriginal();
    System.out.println("Quantidade procurada: "+quantidadeProcurar);

    if(!continua){
        break;
    }

    Iterator<FormatoIntervalo> itIntervalos = listaIntervalo.iterator();
    while(itIntervalos.hasNext()){
        FormatoIntervalo quantidadeValorFormato = itIntervalos.next();
        boolean valorFixo = quantidadeValorFormato.isFixo();
        double quantidadeInicio = quantidadeValorFormato.getInicio();
        double quantidadeFim = quantidadeValorFormato.getFim();
        System.out.println("Comparando: "+quantidadeProcurar+" >= "+quantidadeInicio+" && "+quantidadeProcurar+" <= "+quantidadeFim);
        if (quantidadeProcurar >= quantidadeInicio && quantidadeProcurar <= quantidadeFim) {
            // Achou a quantidade no intervalo
            if(valorFixo && frenteVerso){
                // Dobrar a quantidade para fazer nova busca
                quantidadeProcurar = item.getQuantidade() * 2;
                /*
                 * Preciso aqui que o 'itIntervalos 'volte a ser varrido desde a 1a. posicao, 
                 * ou seja, preciso que o looping seja reiniciado pois preciso que 
                 * a busca pela quantidade seja feita pelo novo valor de 'quantidadeProcurar'
                 */ 
            } else {
                continua = false;
                System.out.println("Encontrou: "+quantidadeProcurar+" >= "+quantidadeInicio+" && "+quantidadeProcurar+" <= "+quantidadeFim);
                listaQuantidadeFormato.add(quantidadeValorFormato);
                System.out.println("Tamanho lista formatos retornada: "+listaQuantidadeFormato.size());
                break;
            }
        }
    }
}
Alguma dica ou alguma outra forma que eu poderia fazer isso nessa coleção?

5 Respostas

T

Você precisa criar um novo iterador, usando listaIntervalo.iterator().

J

Não entendi, criar outro como? Onde? Preciso que ele continue do começo novamente, mesmo porque ele está dentro de um outro while o objeto item.

L

Tem uma discussão bacana sobre o assunto neste tópico:
http://forums.sun.com/thread.jspa?threadID=587562

Basicamente eles acabam citando o que o thingol falou. A dica extra que vai ter lá é dar uma olhada no ResettableIterator do Commons Collections:
http://commons.apache.org/collections/api-release/org/apache/commons/collections/ResettableIterator.html

L

javer:
Não entendi, criar outro como? Onde? Preciso que ele continue do começo novamente, mesmo porque ele está dentro de um outro while o objeto item.

Entao tenta algo tipo isto

itQuantidades = listaQuantididade.iterator(); break;

J
Resolvido:
while(itQuantidades.hasNext()){
    QuantidadeOrcamento item = itQuantidades.next();
    double quantidadeProcurar = item.getQuantidadeOriginal();
    System.out.println("Quantidade procurada: "+quantidadeProcurar);

    if(!continua){
        break;
    }

    Iterator<FormatoIntervalo> itIntervalos = listaIntervalo.iterator();
    while(itIntervalos.hasNext()){
        FormatoIntervalo quantidadeValorFormato = itIntervalos.next();
        boolean valorFixo = quantidadeValorFormato.isFixo();
        double quantidadeInicio = quantidadeValorFormato.getInicio();
        double quantidadeFim = quantidadeValorFormato.getFim();
        System.out.println("Comparando: "+quantidadeProcurar+" >= "+quantidadeInicio+" && "+quantidadeProcurar+" <= "+quantidadeFim);
        if (quantidadeProcurar >= quantidadeInicio && quantidadeProcurar <= quantidadeFim) {
            // Achou a quantidade no intervalo
            if(valorFixo && frenteVerso){
                // Dobrar a quantidade para fazer nova busca
                quantidadeProcurar = item.getQuantidade() * 2;
                // Isso aqui resolveu o problema                
                itIntervalos = listaIntervalo.iterator();
                /*
                 * Preciso aqui que o 'itIntervalos 'volte a ser varrido desde a 1a. posicao, 
                 * ou seja, preciso que o looping seja reiniciado pois preciso que 
                 * a busca pela quantidade seja feita pelo novo valor de 'quantidadeProcurar'
                 */ 
            } else {
                continua = false;
                System.out.println("Encontrou: "+quantidadeProcurar+" >= "+quantidadeInicio+" && "+quantidadeProcurar+" <= "+quantidadeFim);
                listaQuantidadeFormato.add(quantidadeValorFormato);
                System.out.println("Tamanho lista formatos retornada: "+listaQuantidadeFormato.size());
                break;
            }
        }
    }
}
Criado 3 de julho de 2009
Ultima resposta 3 de jul. de 2009
Respostas 5
Participantes 3