Duvida sobre interção em Lista

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

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.

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();
        }
        
            
    }
}

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);
}

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”.

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?!?!?