Duvida sobre interção em Lista

5 respostas
leosouzabh

E ai pessoal, blzinha!!

Uma estou com uma duvida!!
precisa iterar 2 listas e imprimir os valores alterados:
por exemplo:
tenho a listaA e a lista B,
eu preciso de forma dinamica iterar as 2 listas e imprimir os dados da seguinte forma:

Mas como colocar o codigo para agir desta forma?!?!?

at
Leonardo

5 Respostas

T

Suponha que as listas tenham o mesmo tamanho, e que sejam na verdade ArrayList ou Vector (o que nem sempre é o caso). Se for o caso, é fácil:

if (listaA.size() == listaB.size()) {
    int n = listaA.size();
    for (int i = 0; i < n; ++i) {
        System.out.println (listaA.get(i));
        System.out.println (listaB.get(i));
    }
}

Se não tiverem o mesmo tamanho, e se for uma LinkedList (onde o acesso indexado é MUITO lento, mas via iteradores é mais rápido), posto uma solução daqui a pouco.

T
import java.util.*;

/**
 * Este exemplo pode ser compilado com Java 1.4 ou anterior. 
 * Com Java 5 vai ter um "warning". 
 */
class DuasListas {
    // Note que as listas têm comprimentos diferentes
    static String[] vetor1 = { "Luis", "Geraldo", "Heloisa", "Christovam" };
    static String[] vetor2 = { "Inacio", "Alckmin", "Helena", "Buarque", "Gabeira" };
    static List vetorParaLista (String[] vetor) {
        List retorno = new LinkedList();
        for (int i = 0; i < vetor.length; ++i) {
            retorno.add (vetor[i]);
        }
        return retorno;
    }
    public static void main(String[] args) {
        List listaA = vetorParaLista (vetor1);
        List listaB = vetorParaLista (vetor2);
        Iterator itA = listaA.iterator();
        Iterator itB = listaB.iterator();
        boolean aHasNext = itA.hasNext();
        boolean bHasNext = itB.hasNext();
        while (aHasNext || bHasNext) {
            if (aHasNext) {                            
                String a = (String) itA.next();
                if (a != null) System.out.print ("|" + a);
            }
            if (bHasNext) {
                String b = (String) itB.next();
                if (b != null) System.out.print ("|" + b);
            }
            aHasNext = itA.hasNext();
            bHasNext = itB.hasNext();
        }
        
            
    }
}
zepunk

Esse exemplo à cima funciona e é um jeito bom e funcional.
Porém o legal é começar a usar o Java 5, não sei se vocês podem utilizar esta versão mas ela é a Atual né, sendo assim vc poderia utilizar o For Each.

for(String s: List<String>) {

        System.out.println(s);
}
T

O problema dele é andar em DUAS listas ao mesmo tempo. Para esse tipo de coisas o “foreach” poderia ser até assim:

List&lt;String&gt; listaA = new ArrayList&lt;String&gt;();
List&lt;String&gt; listaB = new ArrayList&lt;String&gt;();
...
if (listaA.size() == listaB.size()) {
     Iterator&lt;String&gt; it = listaB.iterator();
     for (String a : listaA) {
         System.out.println (a); // até aqui tudo bem...
         System.out.println (itB.next()); // não me livrei de usar um iterator :(
     }
 }

Ou seja, fica meio “frankenstein” - moral: nem sempre é adequado usar o “for each”.

leosouzabh

Caros amigos,
Acho que eu me esqueci de um detalhe!!
Eu gostaria de usar essa iteração atravez das JSTL do struts,
alguem sabe me dizer?!?!?

Criado 13 de julho de 2006
Ultima resposta 13 de jul. de 2006
Respostas 5
Participantes 3