HashMap-obtenir la première valeur clé
ci-dessous sont les valeurs contenues dans le HashMap
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 collecter la première "valeur" clé (I. e 33), je veux stocker à la fois la "clé" et la "valeur" dans la variable séparée.
8 réponses
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, 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])
Note: ci-dessus code 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 qu'elles ont été insérées - vous pouvez utiliser cela 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();
comment collecter la première clé "valeur" (I. e 33)
en utilisant youMap.get(keyYouHave)
, vous pouvez obtenir la valeur de celui-ci.
voulez stocker les Deux "Clés" et "Valeur" dans la variable distincte
Oui, vous pouvez attribuer cela à une variable.
Attendre .........ce n'est pas fini.
Si vous(logique) sont fonction de l'ordre de insertions et récupération, vous allez voir des résultats bizarres. Map n'est pas commandé ils ne stockeront pas dans une commande. S'il vous plaît être conscient de ce fait. Utiliser une alternative pour préserver votre commande. Probablement un LinkedHashMap
notez que vous devriez noter que votre flux logique ne doit jamais compter sur l'accès aux éléments HashMap
dans un ordre quelconque, simplement parce que HashMap
s ne sont pas commandés Collection
s et ce n'est pas ce qu'ils sont destinés à faire. (Vous pouvez lire plus au sujet des collections odered et de trieur dans ce post ).
de retour au poste, vous avez déjà fait 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);
rappelez-vous que l'ordre d'insertion n'est pas respecté dans une carte en général. Essayez ceci:
/**
* 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 ce map.size() == 1
.
, Vous pouvez aussi essayer ceci pour obtenir l'intégralité de la première entrée,
Map.Entry<String, String> entry = map.entrySet().stream().findFirst().get();
String key = entry.getKey();
String value = entry.getValue();
ceci pour obtenir seulement 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();
Cette 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 que vous souhaitez obtenir le deuxième (même pour le troisième etc) élément d'une carte, 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();
vous pouvez aussi essayer ci-dessous:
Map.Entry<String, Integer> entry = myMap.firstEntry();
System.out.println("First Value = " + entry);