6
votes

Puis-je modifier une carte via Keyset

J'essaie d'appliquer un filtre à une carte. L'intention est de ne garder que ces clés faisant partie d'un ensemble. La mise en œuvre suivante fournit les résultats requis, mais je veux savoir si c'est la bonne façon?

private void filterProperties(Map<String, Serializable> properties, Set<String> filterSet) {
    Set<String> keys = properties.keySet();
    keys.retainAll(filterSet);
}


0 commentaires

3 Réponses :


7
votes

oui!

L'ensemble est soutenu par la carte, les modifications apportées à la carte sont donc réfléchies dans l'ensemble et vice-versa

(Voir: https://docs.oracle.com/fr/java/javase/11/docs/api/java.base/java/util/hashmap.html#keySet () )


0 commentaires

2
votes

La réponse de itay est correcte, mais vous devrait s'assurer que Propriétés n'est pas modifié par d'autres threads ou est lui-même un fichier de coffre-fort mappe implémentation.

Si carte n'est pas thread-coffre-fort (E.g. hashmap) et est modifié par un autre thread, vous pouvez obtenir concurrentModificationException . .


0 commentaires

0
votes

Votre code a l'air bien. Vous pouvez écrire une seule ligne en tant que Propriétés.keyset (). Retainall (filtreet);

Un problème que je vois est que la carte pourrait être non modifiable. Si c'est une possibilité, vous construisez peut-être une nouvelle carte avec un jeu d'entrée d'origine, puis de filtrer et de renvoyer ce sera une meilleure option.


0 commentaires