Pessoal seguinte, estou com o seguinte cenario: Tenho uma consulta que gera um Map, esta primeira consulta vai servir como espelho para uma segunda.
Caso a segunda lista nao contenha algum valor da primeira lista, preciso que seja impresso esse valor.
Caso em uma nova consulta estiver com o map estiver com o mesmo valor faltando conforme ja visto, entao deve ignorar e seguir o loop.
Caso o item que estava faltando for inserido novamente, entao informar que o item foi adicionado.
// copia a primeira
HashSet chavesNaoContidas = new HashSet(primairaLista.keySet()); // supondo que as listas sejam map
// remove os que estão na segunda
chavesNaoContidas.removeAll(segundaLista.keySet());
imprime(chavesNaoContidas);
if (chavesNaoContidas.contains(chaveDoNovo)) {
imprime(novo);
chavesNaoContidas.remove(chaveDoNovo); // atualiza
}
segundaLista.put(chaveDoNovo, novo);
Desculpe pela demora no retorno, estou passando por uns problemas familiares!
Mas ok vamos la… Funcionou conforme vc me sugeriu, mas estou com duvidas em relacao a questao do IF:
if (chavesNaoContidas.contains(chaveDoNovo)) {
imprime(novo);
chavesNaoContidas.remove(chaveDoNovo); // atualiza
}
segundaLista.put(chaveDoNovo, novo);
chaveDoNovo eu nao entendi de onde buscar, Como me sugeri para relacionar esse novo item que estava falatando.
A estrutura Set é um conjunto. Conjuntos não podem ter elementos iguais. Listas podem ter elementos iguais.
A estrutura Map é um tipo de conjunto em que a comparação é feita pela chave e não pelo elemento como no conjunto normal, permitindo que haja mais de um elemento igual, mas as chaves somente única.
A chaveDoNovo é a chave de identificação do novo elemento. Não sei qual seria chave pois não sei que tipo o novo elemento é.
Exemplos de chaves:
chave | elemento
------------------------------------
placa do veículo | veículo
CPF | pessoa física
CNPJ | pessoa jurídica
id | estudante
id | funcionário
Na linha onde está:
if (chavesNaoContidas.contains(chaveDoNovo)) {
A comparação é feita pela chave e não do elemento
vc poderia também usar:
if ( !segundaLista.containsValue(novo) ){
que verifica se contém o elemento (não a chave), ou usar:
if ( !segundaLista.containsKey(chaveDonovo) ){
que seria o equivalente ao que foi postado anteriormente
Aqui tenho um exemplo onde consigo representar melhor a necessidade.
Map<String, String> map1 = new HashMap<String,String>();
map1.put(“1”,“One”);
map1.put(“2”,“Two”);
map1.put(“3”,“Three”);
map1.put(“4”,“Four”);
map1.put(“5”,“Five”);
Map<String,String> map2 = new HashMap<String, String>();
map2.put(“1”,“One”);
map2.put(“2”,“Two”);
map2.put(“3”,“Three”);
map2.put(“4”,“Four”);
Tendo as 2 consultas conforme esta no exemplo na consulta map2, esta faltando o K/V map1.put(“5”,“Five”);
Este passo ja esta resolvido com o seu codigo passado anteriormente, onde ele esta me mostrando o valor que esta faltando no segundo map.
O que se faz necessario agora e que, caso em um nova consulta o valor map1.put(“5”,“Five”); seja inserido no map2 deve ocorrer de informar que o K/V estao presentes na segunda lista.
Algo do tipo: Valor “Four” Adicionado na Segunda Consulta.