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.

70
demandé sur T J 2014-10-07 10:54:37

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
132
répondu Ruchira Gayan Ranaweera 2017-11-20 22:30:38

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.

39
répondu Bohemian 2014-10-07 07:13:42

Java 8 façon de faire,

String firstKey = map.keySet().stream().findFirst().get();

19
répondu whoami 2017-08-16 04:28:32

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

4
répondu ꜱᴜʀᴇꜱʜ ᴀᴛᴛᴀ 2014-10-07 07:09:00

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);
0
répondu tmarwen 2017-05-23 11:47:06

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 .

0
répondu Maxime Claude 2017-12-11 19:10:58

, 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();
0
répondu George Siggouroglou 2018-08-22 14:32:47

vous pouvez aussi essayer ci-dessous:

Map.Entry<String, Integer> entry = myMap.firstEntry();
System.out.println("First Value = " + entry);
-2
répondu Veera 2017-01-31 06:58:43