Percorrer uma lista dentro da outra

8 respostas
oitathi

Pessoal eu tenho a seguinte estrutura:

public class MyLatitudes implements Comparable<MyLatitudes> {

    private double latitude;
    private LinkedList<DefLons> listDefLons = new LinkedList<DefLons>();

    public MyLatitudes(double latitude){
        this.latitude=latitude;
    }


    public void putOnListDefLons (double lon, int x, int y){
        DefLons defLons = new DefLons(lon, x, y);
        listDefLons.add(defLons);
    }


    public double getLatitude(){
        return this.latitude;
    }

    public LinkedList<DefLons> getListDefLons() {
        return listDefLons;
    }

    

    public int compareTo(MyLatitudes lat) {
        if(lat.getLatitude()>this.getLatitude()){
            return 1;
        }
        if(lat.getLatitude()< this.getLatitude()){
            return -1;
        }
        else{
            return 0;
        }
    }
}

E, em outra classe, eu criei uma lista de objetos do tipo MyLatitudes

private LinkedList<MyLatitudes> listLat = new LinkedList<MyLatitudes>();

Agora eu quero fazer um método que percorra cada uma das minhas listLat (já que são criadas várias, dependendo da latitude lida), verificando se há listDefLons com o mesmo tamanho e com os mesmos elementos. Além disso eu preciso que quando o método encontre listas “internas” iguais, ele me dê as listas que possuem maior distancia entre uma e outra.
Por exemplo, supondo que eu tenha a seguinte estrutura

listLat1 possui listDefLons com os seguintes elementos : 1,2,5,7, 9
listLat2 " " " " " " : 2,4,8,7,1,9,15,36
listLat3 " " " " " " : 3,8,2
listLat4 " " " " " " : 1,2,5,7, 9
listLat5 " " " " " " : 1,2,5,7, 9
listLat6 " " " " " " : 2,4,8,7,1,9,15,36
listLat7 " " " " " " : 2,4,8,7,1,9,15,36

Eu quero q o resultado do meu método seja listLat2 e listLat7. Como posso fazer isso?

8 Respostas

ibispo

Fiquei meio confuso com o que vc precisa.

Pelo que vi acima, pq o listLat6 não entraria no resultado do método?

oitathi

pq eu preciso doa resultados com a maior distancia entende? tipo 2 e 7… não 2 e 6…

oitathi

Por favor… alquem me ajuda!!!

oitathi

Então, primeiramente eu tô tentando percorrer as listas que se encontram dentro da minha listaLat. Tô fazendo desse jeito:

Iterator it = listLat.iterator();
            while (it.hasNext()) {
                MyLatitudes aux = (MyLatitudes) it.next();
                Iterator it2 = aux.getListDefLons().iterator();
                     while (it2.hasNext()) {
                         DefLons def = (DefLons)it2.next();
                         System.out.println(def.getLon());
                     }
             }

Agora, como eu faço pra comparar a a lista do primeiro elemento de listLat com a lista do segundo elemento de listLat e assim sucessivamente?

oitathi

eu tô apanhando, mas consegui fazer um código que compara uma lista com a outra…Porém tah meio “feio”…
Alguém pode dar umas dicas para melhorar?

Iterator it = listLat.iterator();
            while (it.hasNext()) {
                MyLatitudes aux = (MyLatitudes) it.next();
                if(listLat.iterator().next()==null){System.exit(0);}
                else{
                     MyLatitudes aux2 =listLat.iterator().next();
                     Iterator it2 = aux.getListDefLons().iterator();
                     Iterator it3 = aux2.getListDefLons().iterator();
                     while (it2.hasNext()|| it3.hasNext()) {
                         DefLons def =  (DefLons)it2.next();
                         DefLons def2 = (DefLons)it3.next();
                         if(def.getLon()==def2.getLon()){
                            System.out.println("igual");
                         }//end if
                    System.out.println("_________________");
                    }//end while
                }//end else
            }//end while
rafaelviny

aqui to percorrendo 2 listas

verifique se esse processo nao pode te ajudar

for (RosterGroup grup : grupoRG) {
            String groupName = String.valueOf(grup.getName());
            adicionaGrupo("<html><b><font color = red>" + groupName, "<html><b><font color = red>" + groupName);
            nomeGrupo = grup.getName();
            contadorGrupo++;

            for (RosterEntry contatos : contatosRG) {
                if (grup.getEntry(contatos.getUser()) != null) {
                    emails.add(cont, contatos.getName());
                    nomes.add(cont, contatos.getUser());
                }
                for (int i = 0; i < emails.size(); i++) {
                    Collections.sort(emails);
                    Collections.sort(nomes);
                    String nome = nomes.get(i);
                    String email = emails.get(i);
                    Object[] valor = {nome, email};
                    tabelaUsuarios.adicionaLinha(valor);
                }
                contadorContatos++;

            }

        }
oitathi

Gente mudei um pouquinho o código…
Mas ainda tô meio perdida… alguém pode me ajudar e ver se isso faz sentido:

Iterator it = listLat.iterator();
            while (it.hasNext()) {
                MyLatitudes aux = (MyLatitudes) it.next();
                Iterator it2 = aux.getListDefLons().iterator();
                if(listLat.iterator().next()==null){System.exit(0);}
                else{
                     MyLatitudes aux2 =(MyLatitudes)listLat.iterator().next();
                     Iterator it3 = aux2.getListDefLons().iterator();
                     while (it2.hasNext()|| it3.hasNext()) {
                         DefLons def =  (DefLons)it2.next();
                         DefLons def2 = (DefLons)it3.next();
                         if(def.getLon()!=def2.getLon()){
                             break;
                         }
                         else{
                            System.out.println();
                         }//end if
                    System.out.println("_________________");
                    }//end while
                }//end else
            }//end while
oitathi

Bem, eu consegui fazer desse jeito… Ainda não testei com diversas possibilidades… Se alguém puder me ajudar:

public void isEqual(){
        int i=0;
        int j =i+1;
        int contaLon=0;
        int indexTopLat=0;
        int indexBottomLat=0;
        while(i<listLat.size()-1){
            while(j<listLat.size()){
                MyLatitudes auxLat1 = (MyLatitudes)listLat.get(i);
                MyLatitudes auxLat2 = (MyLatitudes)listLat.get(j);
                if(auxLat1.getListDefLons().size()!=auxLat2.getListDefLons().size()){
                    j++;
                    System.out.println("Fora!!!");
                    break;
                }//end if
                while(contaLon<auxLat1.getListDefLons().size()){
                    if(auxLat1.getListDefLons().get(contaLon).getLon()!= auxLat2.getListDefLons().get(contaLon).getLon()){
                        j++;
                        System.out.println("Fora!!!");
                        break;
                    }//end if
                    contaLon++;
               }//end while
               if(contaLon==auxLat1.getListDefLons().size()&& (i<=indexTopLat && j>=indexBottomLat)){
                   indexTopLat=i;
                   indexBottomLat=j;
               }
                System.out.println("i: "+ i+"      j: "+j);
               j++;
            }//end while
            i++;
            j=i+1;
        }//end while
        System.out.println("Top: "+indexTopLat+"    "+"Bottom: "+indexBottomLat);
    }//end method

Valeu!!

Criado 16 de março de 2011
Ultima resposta 22 de mar. de 2011
Respostas 8
Participantes 3