Arrays - localizar não coincidentes

4 respostas
knik

Pessoal,
É um problema de lógica (preciso voltar aos bancos escolares)!

O código abaixo printa todos os itens coincidentes entre duas listas.

//crio duas listas com itens diferentes
		List<String> lista1 = new ArrayList<String>();
		lista1.add("pato");
		lista1.add("galinha");
		lista1.add("marreco");
		
		List<String> lista2 = new ArrayList<String>();
		lista2.add("pato");
		lista2.add("galinha");
		lista2.add("gavião");
		
		//aqui lista os coincidentes
		for(String strLista1 : lista1){
			for(String strLista2 : lista2){
				if(strLista1.equals(strLista2)){
					System.out.println("coincidente -" + strLista1);
				}
			}
		}

Veja que na lista2, não tem marreco, mas tem gavião.
Então, o código printa pato e galinha.
Eu queria printar somente os itens que não tem na lista1, ou seja, o resultado tem de ser apenas gavião.

Uma ajuda? sei que é básico, mas o forum também é para iniciantes (básico).
Obrigado.

4 Respostas

F

Mas não é só colocar a negação na frente!?!?

Assim:

if(!strLista1.equals(strLista2)){ System.out.println("Não Coincidente -" + strLista1); }

Daí vai imprimir só quando for diferente…

thiagocg

knik, vc poderia trabalhar com uma estrutura como um Set, pois ele possui metodos eficientes para comparação de listas.
Mas como vc esta usando List vc pode usar o metodo contains para verificar se o objeto iterado esta ou não presente na outra lista.

Exemplo:

List<String> lista1 = new ArrayList<String>();  
			lista1.add("pato");  
			lista1.add("galinha");  
			lista1.add("marreco");  
			
			List<String> lista2 = new ArrayList<String>();  
			lista2.add("pato");  
			lista2.add("galinha");  
			lista2.add("gavião");  
			  
			for(String s : lista2){  
				if(!lista1.contains(s)){
					System.out.println("coincidente -" + s);
				}
			}

Espero ter ajudado!

[]'s

knik

Obrigado,
A dica do fernando não funciona, pois printa todo mundo, devido ao for
A dica do thiago deu certo.

F

Oh, é mesmo, foi mal aí, não analisei direito. Mas o que pode ficar dá minha dica é o símbolo “!” que indica negação.

Se você fizer assim:if(strLista1.equals(strLista2)){Você está testando se strLista1 é igual a strLista2.

Mas se você fizer assim - com o ! na frente:if(!strLista1.equals(strLista2)){Você está testando se strLista1 não é igual a strLista2.

Essa comparação com o método equals funcionaria perfeitamente bem, se você fosse querer saber o que é igual e o que é diferente, porque você está comparando duas Strings. Mas se você for comparar dois objetos, eles NUNCA seriam considerados iguais com o método equals, até o momento que você SOBRESCREVA o método equals e diga o que é ser igual para o compilador considerar se eles serão iguais ou não.

Blz. Desculpe pelo erro, mas espero ter compensado com a dica.
:thumbup:

Criado 14 de agosto de 2009
Ultima resposta 14 de ago. de 2009
Respostas 4
Participantes 3