Ci-dessous les valeurs contenues dans la carte de hachage
statusName {Active=33, Renewals Completed=3, Application=15}
Code Java pour obtenir la première clé (i.e Active)
Object myKey = statusName.keySet().toArray()[0];
Comment pouvons-nous collecter la première clé "Valeur" (c'est-à-dire 33), je souhaite stocker la "Clé" et la "Valeur" dans une variable distincte.
Vous pouvez essayer ceci:
Map<String,String> map = new HashMap<>();
Map.Entry<String,String> entry = map.entrySet().iterator().next();
String key = entry.getKey();
String value = entry.getValue();
Gardez à l'esprit que HashMap
ne garantit pas l'ordre d'insertion. Utilisez un LinkedHashMap
pour garder la commande intacte.
Par exemple:
Map<String,String> map = new LinkedHashMap<>();
map.put("Active","33");
map.put("Renewals Completed","3");
map.put("Application","15");
Map.Entry<String,String> entry = map.entrySet().iterator().next();
String key= entry.getKey();
String value=entry.getValue();
System.out.println(key);
System.out.println(value);
Sortie:
Active
33
Pour obtenir la "première" valeur:
map.values().toArray()[0]
Pour obtenir la valeur de la "première" clé:
map.get(map.keySet().toArray()[0])
Remarque: Le code ci-dessus a été testé et fonctionne.
Je dis "premier" parce que les entrées HashMap ne sont pas ordonnées.
Cependant, un LinkedHashMap itère ses entrées dans le même ordre d'insertion. Vous pouvez l'utiliser pour l'implémentation de votre carte si l'ordre d'insertion est important.
Java 8 façon de faire,
String firstKey = map.keySet().stream().findFirst().get();
Vous pouvez également essayer ceci pour obtenir la première entrée complète,
Map.Entry<String, String> entry = map.entrySet().stream().findFirst().get();
String key = entry.getKey();
String value = entry.getValue();
Ceci pour obtenir uniquement la clé de la première entrée,
String key = map.entrySet().stream().map(Map.Entry::getKey).findFirst().get();
// or better
String key = map.keySet().stream().findFirst().get();
Ceci pour obtenir uniquement la valeur de la première entrée,
String value = map.entrySet().stream().map(Map.Entry::getValue).findFirst().get();
// or better
String value = map.values().stream().findFirst().get();
De plus, si vous savez ce que vous faites et souhaitez obtenir le deuxième élément de la carte (identique pour le troisième, etc.), vous devriez essayer ceci,
Map.Entry<String, String> entry = map.entrySet().stream().skip(1).findFirst().get();
String key = map.keySet().stream().skip(1).findFirst().get();
String value = map.values().stream().skip(1).findFirst().get();
comment pouvons-nous collecter la première clé "Valeur" (c'est-à-dire 33)
En utilisant youMap.get(keyYouHave)
, vous pouvez en obtenir la valeur.
vouloir stocker les deux "Key" et "Value" dans une variable séparée
Oui, vous pouvez l'affecter à une variable.
Attendez ......... ce n'est pas fini.
Si vous (logique métier) dépendez de l'ordre d'insertion et d'extraction, vous obtiendrez des résultats étranges. La carte n'est pas commandée, elle ne sera pas stockée dans une commande. S'il vous plaît être conscient de ce fait. Utilisez une alternative pour préserver votre commande. Probablement un LinkedHashMap
Rappelez-vous que l'ordre d'insertion n'est pas respecté dans une carte en général. Essaye ça :
/**
* Get the first element of a map. A map doesn't guarantee the insertion order
* @param map
* @param <E>
* @param <K>
* @return
*/
public static <E,K> K getFirstKeyValue(Map<E,K> map){
K value = null;
if(map != null && map.size() > 0){
Map.Entry<E,K> entry = map.entrySet().iterator().next();
if(entry != null)
value = entry.getValue();
}
return value;
}
Je l’utilise seulement quand je suis sûr que ça map.size() == 1
.
Notez que vous devez noter que votre flux logique ne doit jamais dépendre d'un accès aux éléments HashMap
dans un ordre quelconque, simplement parce que HashMap
s ne sont pas commandés Collection
s et que leur but n'est pas faire. (Vous pouvez en savoir plus sur les collections odered et sorter dans this post ).
De retour au poste, vous avez déjà effectué la moitié du travail en chargeant le premier élément clé:
Object myKey = statusName.keySet().toArray()[0];
Appelez simplement map.get(key)
pour obtenir la valeur respective:
Object myValue = statusName.get(myKey);
Améliorer la réponse de whoami. Puisque findFirst()
renvoie un Optional
, il est recommandé de vérifier s'il existe une valeur.
var optional = pair.keySet().stream().findFirst();
if (!optional.isPresent()) {
return;
}
var key = optional.get();
En outre, certains ont fait remarquer que la recherche de la première clé d'une HashSet
n'était pas fiable. Mais parfois nous avons HashMap
paires; c'est-à-dire que dans chaque carte, nous avons une clé et une valeur. Dans de tels cas, trouver rapidement la première clé d'une telle paire est pratique.