Como Reiniciar um Looping em um Iterator?

5 respostas
javer
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().

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.

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;

javer
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