je dois comparer deux fichiers Excel (avec des données différentes) et de créer deux nouvelles tables Excel:Supprimer les entrées de Java LinkedHashMap
- Le tableau 1 contient toutes les entrées correspondant à
- Le tableau 2 contient toutes les entrées qui correspondent à pas
Par conséquent, je parcourir sur les deux fichiers Excel et stocker les entrées correspondantes dans un LinkedHashMap. Dans un deuxième LinkedHashMap je stocke toutes les entrées du fichier Excel. Avec ces deux cartes, je veux identifier le delta.
Pour identifier le delta, je compare les deux listes et je veux maintenant supprimer toutes les entrées de la liste complète, si l'entrée est déjà dans la liste avec les correspondants.
J'ai essayé différentes solutions - toutes avec le résultat que le code est en cours d'exécution mais jamais une entrée n'est vraiment supprimée. Quelqu'un peut-il aider s'il vous plaît?
Heres mon code:
// This code fills both Maps
LinkedHashMap<String, String> liste_matches = new LinkedHashMap<String, String>();
LinkedHashMap<String, String> liste_complete = new LinkedHashMap<String, String>();
while(worksheet1.getLastRowNum() >= j){
liste_complete.put(String.valueOf(worksheet1.getRow(j).getCell(18)), "");
// Counter for loop, loops trough Telekom datasets
int i = 1;
while(worksheet2.getLastRowNum() >= i)
{
if(String.valueOf(worksheet1.getRow(j).getCell(18)).equals(String.valueOf(worksheet2.getRow(i).getCell(9))))
{
if(!liste_matches.containsKey(String.valueOf(worksheet1.getRow(j).getCell(18)))){
liste_matches.put(String.valueOf(worksheet1.getRow(j).getCell(18)), "");
}
}
}
// build Excel table
}
Ceci est mon code, je l'habitude de comparer les deux listes et supprimer toutes les entrées de liste_complete qui sont déjà en liste_matches.
J'ai d'abord essayé ceci (j'ai inséré le ArrayList pour mon deuxième essai ...). Il est en cours d'exécution mais sans aucun effet sur la liste. ArrayList list = new ArrayList();
for(Map.Entry<String,String> keyDelta : liste_complete.entrySet())
{
for(Map.Entry<String,String> key : liste_matches.entrySet()){
if(keyDelta.equals(key)){
liste_complete.remove(keyDelta);
list.add(entry.getValue());
}
}
}
Ensuite j'ai essayé cela, mais aussi sans aucun effet à la liste: for (int c = 0; c < list.size(); C++) { String str = list.get (c) ; liste_complete.remove (str); }
J'ai trouvé cette solution dans StackOverflow, mais qui retourne java.lang.IllegalStateException
Iterator<Map.Entry<String,String>> iter = liste_complete.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<String,String> entry = iter.next();
for(Map.Entry<String,String> key : liste_matches.entrySet()){
if(key.getValue().equalsIgnoreCase(entry.getValue())){
iter.remove();
}
}
}
Avez-vous essayé d'utiliser un débogueur; ou au moins ajouter des instructions de suivi pour comprendre réellement les données qui sont tirées dans vos listes? Vous voyez, vous mettez en place un code assez complexe, mais sans aucune donnée d'entrée; il est très difficile de déboguer ce qui se passe. – GhostCat
Suggestion: 1. Isolez votre code de base afin qu'il n'ait aucune dépendance à l'Excel. 2. Créez un exemple de données de test simple. 3. Ecrivez un test JUnit qui échoue à démontrer votre problème. – Gustave