Erro em usa remoAll

Estou tentando percorre duais lista, mais quando uma delas e null ai sai do laço e não percorri a outra lista.

a lista1 tem menos itens, então ela ira chega null antes da “[size=18]lista2[/size]”
a lista2 tem mas itens.

int a = lista1.size() + lista2.size();

	int i= 0;

	while(i < a){
								
		if(lista1.get(i)!= null){
			if(lista1.get(i) == lista2.get(0)){
				i++;	
				%>
				<%="não é null" %><br>
				<%	
			}
			i++;	
		}else{
                      if(lista2.get(i)!= null)
			i++;
                      }
		}
	}

Cara, voce complicou um pouquinho. O problema é que o programa nao percorre as duas listas, veja o exemplo: se a lista1 tem 2 elementos e a lista2 tem 6 elementos entao :

int a = lista1.size() + lista2.size();   
//teremos a == 8;
  
    int i= 0;   
  
    while(i < a){   
        //quando a >= 2 teremos uma excecao lancada pela lista1 
       //pois ela nao possui o elemento lista1.get(2), entao  o programa nao executa o bloco abaixo
       //isto eh, ele sai do loop while                       
        if(lista1.get(i)!= null){   
            if(lista1.get(i) == lista2.get(0)){   
                i++;       
                %>   
                <%="não é null" %><br>   
                <%     
            }   
            i++;       
        }else{   
                      if(lista2.get(i)!= null)   
            i++;   
                      }   
        }   
    }  

o que recomendo eh q vc utilize o laco foreach da versao 5 do java. Imagine que tenhamos uma lista de pessoas, assim:

List<Pessoa> lista1 = new ArrayList<Pessoa>; 
List<Pessoa> lista2 = new ArrayList<Pessoa>; 
//aqui voce inclui algumas pessoas na lista

for(Pessoa pessoa1 :lista1){
   for(Pessoa pessoa2 :lista2){
       if(pessoa1.getNome() == pessoa2.getNome()){
          <%="não é null" %><br>   
       }
   }
}

Assim voce nao se procupa com incrementacao, cast, etc.

Ate mais

int a = lista1.size() + lista2.size(); Aqui basta uma das duas listas serem null para ocorrer um NullPointerException.

if(lista1.get(i)!= null){ se você tentar pegar um tentar pegar um índice maior que o tamanho da lista vai ocorrer um IndexOutOfBoundsException.
Acho que ficaria melhor você criar uma nova lista adicionado os elementos das outras que não fossem nulas e aí você faz a tua lógica. Algo mais ou menos assim:[code] List lista3 = new ArrayList();

	if (lista1 != null) {
		lista3.addAll(lista1);
	}
	
	if (lista2 != null) {
		lista3.addAll(lista2);
	}
	
	for(Object o: lista3){
		System.out.println(o);
	}[/code]

Espero ter ajudado.

Obrigado a todos. mas o que quero fazer é uma comparação onde:


lista1 ---> 2 contatos que pagou o debito, e os outros da lista2 não pagou ainda.

lista1.add("joao");
lista1.add("maria");

e

lista2 ---> 6 contatos

lista2.add("eu");
lista2.add("tu");
lista2.add("maria");
lista2.add("ele");
lista2.add("joao");
lista2.add("teste");

a ideia e compara  [color=red]lista2[/color] "se tem na " [color=blue]lista1[/color] e preenche uma nova [color=green]lista3[/color] com só os que falta na lista 1

por este motivo tava tentando usar este código.

Faz isto então

import java.util.ArrayList;
import java.util.List;


public class TesteListas {
	
	public static void main(String[] args) {
		List<String> lista1 = new ArrayList<String>();
		List<String> lista2 = new ArrayList<String>();
		List<String> lista3 = new ArrayList<String>();
		
		lista1.add("joao");
		lista1.add("maria");

		lista2.add("eu");
		lista2.add("tu");
		lista2.add("maria");
		lista2.add("ele");
		lista2.add("joao");
		lista2.add("teste");
		
		lista3.addAll(lista2);
		lista3.removeAll(lista1);
		
		System.out.println(lista1);
		System.out.println(lista2);
		System.out.println(lista3);
	}

}

valeu cara pela dica entendi, mais quando eu implemento um objeto tipo Credito ele volta os mesma informação

Collection <Credito> creditoRecebe = instancia.getconsultaCredito();
Collection <Credito> credpago      = instancia.consultaCreditoRecebido(); 

	Iterator<Credito> listaCredito = creditoRecebe.iterator();
	Iterator<Credito> listaPago    = credpago.iterator();
	
	List <Credito> cr =	new ArrayList<Credito>();
	List <Credito> pg = new ArrayList<Credito>();
	
	List <Credito> resul = new ArrayList<Credito>();
	
	
	while(listaCredito.hasNext()){
		cr.add(listaCredito.next());
	}

	while(listaPago.hasNext()){
 		pg.add(listaPago.next());
	}
	
	for(int i = 0; i < pg.size(); i++){
		%>
		<%=pg.get(i).getIdCredito()  %><br>
		<%
	}
	%><br>
	<%
	for(int e = 0; e < cr.size(); ++e){
		%>
		<%=cr.get(e).getIdCredito()  %><br>
		<%
	}
	  
	
	resul.addAll(cr);
	resul.removeAll(pg);
	
	%><br>
	<%
	for(int e = 0; e < resul.size(); ++e){
		%>
		<%=resul.get(e).getIdCredito()  %><br> // mostra os mesmos valores de "cr"  =  listaCredito 
		<%                                                       // retira os valores pago do "pg" =  listaPago
	}
%>

Obrigado mesmo, só não estou conseguindo fazer funcionar com este tipo de objeto.

Oi pessoal do Forum, Gostaria que vocês me desse uma dica pra revolver este problema:

Collection <Credito> creditoRecebe = instancia.getconsultaCredito();  
Collection <Credito> credpago      = instancia.consultaCreditoRecebido();   
  
    Iterator<Credito> listaCredito = creditoRecebe.iterator();  
    Iterator<Credito> listaPago    = credpago.iterator();  
      
    List <Credito> cr = new ArrayList<Credito>();  
    List <Credito> pg = new ArrayList<Credito>();  
      
    List <Credito> resul = new ArrayList<Credito>();  
      
      
    while(listaCredito.hasNext()){  
        cr.add(listaCredito.next());  
    }  
  
    while(listaPago.hasNext()){  
        pg.add(listaPago.next());  
    }  
      
    for(int i = 0; i < pg.size(); i++){  
        %>  
        <%=pg.get(i).getIdCredito()  %><br>  
        <%  
    }  
    %><br>  
    <%  
    for(int e = 0; e < cr.size(); ++e){  
        %>  
        <%=cr.get(e).getIdCredito()  %><br>  
        <%  
    }  
        
      
    resul.addAll(cr);  
    resul.removeAll(pg);  
      
    %><br>  
    <%  
    for(int e = 0; e < resul.size(); ++e){  
        %>  
        <%=resul.get(e).getIdCredito()  %><br> // mostra os mesmos valores de "cr"  =  listaCredito   
        <%                                                       // retira os valores pago do "pg" =  listaPago  
    }  
%>  

Obrigado mesmo, só não estou conseguindo fazer funcionar com este tipo de objeto.

O que estou errando… Ajuda pra me sair deste problema???