[RESOLVIDO]Map, MapSet

10 respostas
L

Bom dia Galera do Guj.com.br

Estou com um probleminha:

Tenho duas variáveis do tipo Map, onde buscam informações (com os parametros que passei) em um programa, e preciso confrontar essas informações uma com a outra, para ver se a informação de uma é referente ao dado que a outra contem, por exemplo:

Map<String, Obj> mapa1 = arroz Map<String, Obj> mapa2 = feijao

exemplo bem superficial.

Preciso saber se os dados do mapa2 são equivalentes ao mapa1, me falaram para usar MapSet, pois caso encontre mais de um resultado com o mesmo nome, com o MapSet, não vai haver duplicação, porém como é a primeira vez que mexo com o tipo Map, não sei bem como fazer.

Falaram pra fazer assim:

mapa1.containsValue(mapa2.get(nome_variavel));

Se alguém puder ajudar, agradeço desde já!

10 Respostas

ViniGodoy

Quando você vai considerar que são iguais?
Não basta usar o equals dos dois maps?

L

Então ViniGodoy…

Eu pego informações em um programa cobol, porém no mapa1 por exemplo, eu posso achar mais de um resultado, e armazeno todos os resultados encontrados no mapa1.
O mapa2, vai procurar pelo fechamento desses programas, ou seja:

Se no mapa1 conter: A b c d

O mapa2 vai procurar pelo fechamento desses programas, como por exemplo: Close a b d

Ou seja, preciso confrontar os resultados, no caso que passei, apenas os programas “a”, “b” e “d” que possuem fechamento, por isso saber quando são iguais.

ViniGodoy

E qual é o problema de vc fazer algo como:

for (String key : mapa1.keySet()) { if (mapa1.get(key).equals(mapa2.get(key)) { //São iguais } }

L

No caso, estou tentando assim:

public void MapeiaClose(int p){
			boolean close = false;
		if(linhaDeConteudoFonte.elementAt(p).contains("CLOSE")){
			String linha = buscaEconcatena(p, linhaDeConteudoFonte, ".");
			linha = linha.replace("CLOSE","");
			linha = linha.replace(".", "");
			String[] closeArray = linha.split(" ");		
			for(int i = p; i < closeArray.length; i++){
				mapaEstrutura.put(closeArray[i], estDados);
				if(closeArray[i].equals(mapa.containsValue(mapaEstrutura.get(estDados.getNoFisico())) == true)){
					System.out.println(mapa);
					close = true;
				}				
			}
		}
	}

onde: buscaEconcatena, é um método criado, para concatenar uma linha, de acordo com os parametros que passei.
estDados.getNoFisico, fica os resultados encontrados pelo mapa.

Seguindo seu Exemplo eu faria assim ? :

public void MapeiaClose(int p){
			boolean close = false;
		if(linhaDeConteudoFonte.elementAt(p).contains("CLOSE")){
			String linha = buscaEconcatena(p, linhaDeConteudoFonte, ".");
			linha = linha.replace("CLOSE","");
			linha = linha.replace(".", "");
			String[] closeArray = linha.split(" ");		
			for(int i = p; i < closeArray.length; i++){
		            for (String key : mapa1.keySet()) {  
                               if (mapa1.get(key).equals(mapa2.get(key)) { 
        
                                      }  
                                  }  
				}				
			}
		}
	}
ViniGodoy

Sim.

O que é essa classe Obj?

L

Fiz o q vc me disse, porém, não passa da condição if, e adiciona TreeMap$EntrySet ao mapaEstrutura. Devo passar algum valor na condição IF?

douglaskd

não testei…

tente ai:

public void MapeiaClose(int p){ boolean close = false; if(linhaDeConteudoFonte.elementAt(p).contains("CLOSE")){ String linha = buscaEconcatena(p, linhaDeConteudoFonte, "."); linha = linha.replace("CLOSE",""); linha = linha.replace(".", ""); String[] closeArray = linha.split(" "); for(int i = p; i < closeArray.length; i++){ mapaEstrutura.put(closeArray[i], estDados); } for (String key : mapa.keySet()) { if ( mapa.get(key).equals(mapaEstrutura.get(key))) { //são iguais } } } }

L

DouglasKD

Está acontecendo a mesma coisa do exmplo do Vinicius.
Vou ver oq consigo fazer aqui, se não só quarta msm :confused:

Obrigado aos dois :smiley:
e
Desculpa pela encheção rsrs

douglaskd
for (String key : mapa.keySet()) {

if ( mapa.get(key).equals(mapaEstrutura.get(key))) {

//são iguais

}

}

onde você montou esse mapa ? tem como postar o código

L

Mostrar todo ele:

Criado 30 de abril de 2012
Ultima resposta 30 de abr. de 2012
Respostas 10
Participantes 3