Comment supprimer une entrée de Java Map
sans utiliser l'itération à l'aide de la valeur ou de la clé. Fondamentalement, dans ma carte, j'utilise containsKey()
puis map.remove()
pour le supprimer.
Vous supprimez une entrée d'une carte en utilisant la clé de l'élément que vous souhaitez supprimer.
map.remove("aKey");
Si vous ne connaissez pas la clé de l'élément, vous devez itérer pour l'obtenir de la manière suivante:
public static <T, E> Set<T> getKeysByValue(Map<T, E> map, E value) {
Set<T> keys = new HashSet<T>();
for (Entry<T, E> entry : map.entrySet()) {
if (value.equals(entry.getValue())) {
keys.add(entry.getKey());
}
}
return keys;
}
Cela renverra toutes les clés trouvées sur la carte.
Map<Integer, String> abcMap = new HashMap<Integer, String>();
abcMap.put(1,"A");
abcMap.put(2,"B");
abcMap.put(3,"C");
/// now for remove item
abcMap.remove(1);
// this will remove "A" from abcMap..
Dans la plupart des cas, vous pouvez supprimer une entrée (paire clé-valeur) d'une carte à l'aide de la méthode Map.remove(key)
. Il n'y aura pas d'itération sur la carte. Vous n'avez pas besoin d'utiliser Map.containsKey(key)
avant Map.remove(key)
car Map.remove
le fait déjà. Il renvoie une valeur associée précédente avec key
ou null
s'il n'y a pas eu de mappage pour key
.
Mais vous ne pouvez pas faire la même chose en utilisant uniquement une valeur (sans clé). La seule option consiste à parcourir la carte et à trouver une entrée (ou des entrées) avec cette valeur.
Java 5-7:
for (Iterator<MyValue> it = map.values.iterator(); it.hasNext(); ) {
if(it.next().equals(myValue)) {
it.remove();
}
}
Java 8:
map.values().removeIf(v -> v.equals(myValue));
Utilisez Map#remove(Object key)
:
public V remove(Object key)
Supprime le mappage de cette clé de cette carte s'il est présent (opération facultative). Plus formellement, si ce mappage contient un mappage de la clé k à la valeur v tel que
(key==null ? k==null : key.equals(k))
, ce mappage est supprimé. (La carte peut contenir au plus une telle cartographie.)Retourne la valeur à laquelle la carte a précédemment associé la clé, ou null si la carte ne contenait aucune correspondance pour cette clé. (Un retour à zéro peut également indiquer que la mappe précédemment associée à null avec la clé spécifiée si l'implémentation prend en charge les valeurs null.) La mappe ne contiendra pas de mappage pour la clé spécifiée une fois l'appel renvoyé.
En gros, vous pouvez appeler supprimer, même si la clé n'existe pas. Il échouera silencieusement dans ce cas (retourne null). L'objet n'a pas besoin d'être identique ni identique, si yourKey.equals(key)
est vrai pour la clé que vous voulez supprimer.
public Object remove(Object key)
Méthode remove
dans Map
.
De javadoc :
Supprime le mappage de cette clé de cette carte s'il est présent (opération facultative). Plus formellement, si ce mappage contient un mappage de la clé k à la valeur v tel que (key==null ? k==null : key.equals(k)),
, ce mappage est supprimé. (La carte peut contenir au plus une telle cartographie.)
Retourne la valeur à laquelle la carte a précédemment associé la clé, ou null
si la carte ne contenait aucune correspondance pour cette clé. (Un retour null
peut également indiquer que la mappe précédemment associée à null
avec la clé spécifiée si l'implémentation prend en charge les valeurs null
.) La mappe ne contiendra pas de mappage pour la clé spécifiée une fois l'appel renvoyé.
Paramètres:
clé - clé dont la cartographie doit être supprimée de la carte.
Retourne :
Valeur précédente associée à la clé spécifiée, ou null
s'il n'y a pas eu de mappage pour la clé.
Exemple:
Map<Integer, String> map=new HashMap<>();
map.put(20, "stackOverflow");
System.out.println(map.remove(20));
Ce code imprimera "stackOverflow"
c’est-à-dire la valeur précédente associée à la clé spécifiée. J'espère que ça aide.
Il semble que personne ici n'ait réellement répondu à la question de OP. Ils demandaient comment, sans utiliser d'itérateur, supprimer une entrée "en utilisant une valeur ou une clé" . Bien entendu, remove(key)
fonctionne si vous avez la clé, mais pas si vous recherchez un valeur.
La réponse d'Alfredo était la plus proche, en ce sens qu'elle recherche le côté valeur de Map
, mais utilise un itérateur.
Voici une solution utilisant l'API Stream
de Java 8; pas d'itérateurs:
Map<K, V> newMap = map.entrySet().stream()
.filter(entry -> !entry.getKey().equals(searchValue))
.filter(entry -> !entry.getValue().equals(searchValue))
.collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
(Remplacez K
et V
par vos types de clé et de valeur.)
Utilisez la méthode Map
NAME __'S remove
NAME_ , qui prend une clé en tant qu'argument. Vous n'avez pas besoin de l'objet original; vous avez simplement besoin d'un objet qui se compare à la clé existante de la carte avec equals
et produit le même hashCode
que la clé existante de la carte.
public static void main(String[] args) {
//Constant.mapCustomer.remove("s");
Map<String, String> mapCustomer=new HashMap<String, String> ();;
mapCustomer.put("s","ss");
System.out.println(mapCustomer.get("s"));
mapCustomer.remove("s");
System.out.println(mapCustomer.get("s"));
}