Dans cet article, je vais vous montrer quelques moyens d'obtenir les clés et les valeurs stockées dans Map dans un processus itératif, quelle que soit l'implémentation. Les lecteurs cibles de cet article sont principalement des débutants aux intermédiaires.
Je pense qu'il existe de nombreuses situations où vous utilisez la structure de données d'une liste telle que ʻArrayList ou
LinkedList` comme moyen de gérer un ensemble d'informations lors de la programmation, mais en maîtrisant la structure de données de Map, vous pouvez facilement résoudre des problèmes plus compliqués. J'aimerais que vous appreniez à l'utiliser car vous serez en mesure de le gérer.
Les méthodes suivantes sont principalement utilisées pour obtenir des clés et des valeurs à partir d'une collection de structures Map pendant le traitement itératif.
--Utiliser ʻEntrySet --Utilisez la méthode
forEach (BiConsumer <T, U>)` (JDK 1.8 ou version ultérieure)
Cela ne vous est peut-être pas familier maintenant, mais vous pouvez facilement obtenir les clés et les valeurs stockées dans la carte dans un processus itératif en utilisant ʻEntrySet`.
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public final class TestEntrySet {
public static void main(String[] args) {
final Map<String, String> testMap = new HashMap<>(3);
testEntrySet.put("test1", "value1");
testEntrySet.put("test2", "value2");
testEntrySet.put("test3", "value3");
final Set<Entry<String, String>> testEntrySet = testMap.entrySet();
for (Map.Entry<String, String> entry : testEntrySet) {
System.out.println(entry.getKey());
System.out.println(entry.getValue());
}
}
}
Dans l'exemple de code ci-dessus, la carte de test implémentée dans HashMap
est déclarée, les valeurs de test sont définies, puis la méthode ʻentrySet ()` est appelée.
Vous pouvez obtenir ʻEntrySet de type
Set <Entry <String, String >> en appelant la méthode ʻentrySet ()
. Utilisez le ʻEntrySet obtenu ici dans l'instruction for étendue. Bien sûr, dans l'exemple de code ci-dessus, nous obtenons ʻEntrySet
avant l'itération, mais vous pouvez également obtenir ʻEntrySet` lorsque vous utilisez l'extension pour comme indiqué ci-dessous.
//Obtenir EntrySet lors de la définition de l'instruction Extended for
for (Map.Entry<String, String> entry : testMap.entrySet()) {
}
Vous pouvez obtenir la clé stockée dans la carte en utilisant la méthode getKey ()
dans le processus itératif, et la valeur stockée dans la carte en utilisant la méthode getValue ()
.
Par conséquent, le résultat de l'exécution de l'exemple de code ci-dessus est généré comme suit.
test1
value1
test2
value2
test3
value3
Peut-être que la méthode utilisant cette méthode forEach ()
est maintenant plus courante que le processus itératif utilisant ʻEntrySetintroduit plus tôt. Cette méthode
forEach () est une méthode relativement nouvelle implémentée dans JDK1.8 avec l'ajout de l'interface fonctionnelle, et il est maintenant plus intuitif d'itérer que ʻEntrySet
.
import java.util.HashMap;
import java.util.Map;
public final class TestForEach {
public static void main(String[] args) {
final Map<String, String> testMap = new HashMap<>(3);
testEntrySet.put("test1", "value1");
testEntrySet.put("test2", "value2");
testEntrySet.put("test3", "value3");
//BiConsumer comme argument<T, U>Passer une expression lambda qui implémente
testMap.forEach((key, value) -> {
System.out.println(key);
System.out.println(value);
});
}
}
À première vue, vous constaterez que c'est plus concis que la méthode ʻEntrySet`.
Le point qui semble difficile est l'argument, mais l'argument de la méthode forEach ()
reçoit une expression lambda qui implémente l'interface fonctionnelle BiConsumer <T, U>
. J'omettrai l'expression lambda et l'interface fonctionnelle car elles s'écartent du but de cet article, mais lorsque vous utilisez la méthode forEach ()
dans Map, vous pouvez vous rappeler comment écrire l'exemple de code ci-dessus.
Le nom de la variable spécifié dans l'expression lambda peut être modifié de manière arbitraire. Dans le cas de l'exemple de code ci-dessus, la clé Map est stockée dans «key» et la valeur Map est stockée dans «value».
Par conséquent, le résultat de l'exécution de l'exemple de code ci-dessus sera comme suit lors de l'utilisation de ʻEntrySet`.
test1
value1
test2
value2
test3
value3
En raison des caractéristiques de l'interface fonctionnelle BiConsumer <T, U>
, la valeur de retour ne peut pas être retournée dans le processus itératif à l'aide de la méthode forEach ()
. Certaines interfaces fonctionnelles renvoient une valeur, mais la méthode forEach ()
répète simplement le processus pour la taille de la carte.
Par exemple, si vous voulez renvoyer false
comme valeur booléenne lorsqu'une erreur est détectée dans le processus itératif de Map, nous vous recommandons d'utiliser ʻEntrySet au lieu de
forEach ()`.
Recommended Posts