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); }
3 Réponses :
oui! p>
L'ensemble est soutenu par la carte, les modifications apportées à la carte sont donc réfléchies dans l'ensemble et vice-versa p> blockQuote>
(Voir: https://docs.oracle.com/fr/java/javase/11/docs/api/java.base/java/util/hashmap.html#keySet () ) p>
La réponse de itay est correcte, mais vous devrait s'assurer que Si Propriétés CODE> n'est pas modifié par d'autres threads ou est lui-même un fichier de coffre-fort
mappe code> implémentation. P>
carte code> n'est pas thread-coffre-fort (E.g. hashmap) et est modifié par un autre thread, vous pouvez obtenir
concurrentModificationException code>. P>.
Votre code a l'air bien. Vous pouvez écrire une seule ligne en tant que 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. p> Propriétés.keyset (). Retainall (filtreet); code> p>