Comment obtenir la différence entre les deux cartes Java?
J'ai deux cartes comme ci-dessous :
Map<String, Record> sourceRecords;
Map<String, Record> targetRecords;
Je veux obtenir les clés diffèrent les uns des cartes.j'.e.
- Il montre la cartographie des clés disponibles dans sourceRecords mais pas dans targetRecords.
- Il montre la cartographie des clés disponibles dans targetRecords mais pas dans sourceRecords.
J'ai fait comme ci-dessous :
Set<String> sourceKeysList = new HashSet<String>(sourceRecords.keySet());
Set<String> targetKeysList = new HashSet<String>(targetRecords.keySet());
SetView<String> intersection = Sets.intersection(sourceKeysList, targetKeysList);
Iterator it = intersection.iterator();
while (it.hasNext()) {
Object object = (Object) it.next();
System.out.println(object.toString());
}
SetView<String> difference = Sets.symmetricDifference(sourceKeysList, targetKeysList);
ImmutableSet<String> immutableSet = difference.immutableCopy();
MODIFIER
if(sourceKeysList.removeAll(targetKeysList)){
//distinct sourceKeys
Iterator<String> it1 = sourceKeysList.iterator();
while (it1.hasNext()) {
String id = (String) it1.next();
String resultMessage = "This ID exists in source file but not in target file";
System.out.println(resultMessage);
values = createMessageRow(id, resultMessage);
result.add(values);
}
}
if(targetKeysList.removeAll(sourceKeysList)){
//distinct targetKeys
Iterator<String> it1 = targetKeysList.iterator();
while (it1.hasNext()) {
String id = (String) it1.next();
String resultMessage = "This ID exists in target file but not in source file";
System.out.println(resultMessage);
values = createMessageRow(id, resultMessage);
result.add(values);
}
}
Je suis en mesure de trouver les clés communs, mais pas de clés distinctes. S'il vous plaît aider.
Vous êtes à la recherche pour la Goyave est
Sets.symmetricDifference(source.keySet(), target.keySet())
?
OriginalL'auteur Robot | 2016-06-24
Vous devez vous connecter pour publier un commentaire.
Jeux vous permettent de supprimer éléments.
Si la génération de "l'aide" des ensembles n'est pas un problème pour vous (à cause de trop d'entrées; ce sujet:
alors:
alors que
Vous pouvez travailler votre chemin à partir de là ...
Et ce qui vous empêche de faire l'inverse "retrait" sur set2?
J'ai appliqué la même, voir les édité question mais n'a pas de résoudre mon problème
Je ne comprends vraiment pas votre problème. Si vous n': A-B; vous obtenez Un-B; et quand vous ne le B-A; vous obtenez B-A. bien sûr, le seul point à prendre en compte est que vous devriez faire des copies de B pour ces opérations de suppression.
obtenu grâce.. exactement ce qui était le problème. Avant de l'enlever, je dois faire une copie qui m'a manqué.
OriginalL'auteur GhostCat
Vous pouvez utiliser Goyave's
Cartes.différence(Map<K, V> à gauche, la Carte<K, V> droite)
méthode. Elle renvoie uneMapDifference
objet, qui a des méthodes pour obtenir les quatre types de carte les entrées:Donc dans votre cas, il pourrait être résolu avec seulement 3 lignes de code:
Poser sa propre question, consultez Comment Demander.
Je ne sais vraiment pas comment ce stackoverflow œuvres :/ quand j'ai demandé ppl voté vers le bas en disant: ce n'est pas la bonne question et je dois le prendre vers le bas, lorsque j'ai demandé ici vous suggère de le faire en tant que question distincte
Ce n'est pas de comprendre? Demandez à question dans la boîte de dialogue. Post réponse par réponse de la boîte. Utilisez les commentaires pour les commentaires pour clarifier des réponses ou des questions, pas pour poser une nouvelle question.
OriginalL'auteur Philipp Wendler
Vous pouvez utiliser une copie
Set
etremoveAll
:Voir L'Ensemble De L'Interface
OriginalL'auteur Arnaud
sourceKeysList.removeAll(targetKeysList)
targetKeysList.removeAll(sourceKeysList)
OriginalL'auteur Daniel Stradowski