web-dev-qa-db-fra.com

Comment récupérer les clés et les valeurs de hashmap

J'essaie d'insérer les valeurs de la carte de hachage au travers d'un objet et je souhaite vérifier si les valeurs sont insérées dans la carte de hachage. Donc, j'utilise ce code, mais au moment de l'exécution, je ne parviens pas à obtenir de sortie.

Comment résoudre ce problème? 

Code:

import Java.util.*;
import Java.io.*;
import Java.lang.*;

public class TaskList
{   

    private static HashMap<Integer, Object[]> dataz = new HashMap<Integer,Object[]>();
    private static  HashMap<Integer, Object[]> screen_dataz = new HashMap<Integer,Object[]>();
    public final static Object[][] longValues = {{"10", "kstc-proc", "10.10.10.10.10.","5","O"},{"11", "proc-lvk1", "12.1.2.","4","O"},{"13", "trng-lvk1", "4.6.1.","3","O"}};
    private static String sl,pid,tid,mval,status;

    public static void main(String args[])
    {
        addTask();
    }

    public static void addTask()
    {  
        for (int k=0; k<longValues.length; k++)
        {
        screen_dataz.put(k,longValues);
        }
        Set mapSet = (Set) screen_dataz.entrySet();
        Iterator mapIterator = mapSet.iterator();
        while (mapIterator.hasNext()) 
        {
        Map.Entry mapEntry = (Map.Entry) mapIterator.next();
        String keyValue = (String) mapEntry.getKey();
        String value = (String) mapEntry.getValue();
        System.out.println(value);
        }
    }
}
3
milano

Tout d'abord, vous devez ajouter une ligne de la matrice longValues à la carte, et non la matrice entière:

 for (int k=0; k<longValues.length; k++)
 {
     screen_dataz.put(k,longValues[k]);
 }

Ensuite, lors de l'itération, extrayez la valeur sous la forme Object[] et non pas String, et la clé sous la forme Integer

 while (mapIterator.hasNext()) 
 {
     Map.Entry mapEntry = (Map.Entry) mapIterator.next();
     Integer keyValue = (Integer) mapEntry.getKey();
     Object[] value = (Object[]) mapEntry.getValue();
     //iterate over the array and print each value
     for (int i=0; i<value.length; i++) {
         System.out.print(value[i] + " ");
     }
     System.out.println();
 }
5
darijan

Votre code avec quelques corrections/améliorations:

  • ne pas utiliser de casting lors de l'utilisation de génériques
  • la boucle ajoutant des éléments à screen_dataz ajoutait toujours le même objet
  • la valeur stockée dans la carte est un tableau, ce qui signifie qu'elle ne sera pas imprimée comme prévu avec un simple appel à toString()

    public class TaskList {
        private static HashMap<Integer, String[]> dataz = new HashMap<Integer, String[]>();
        private static HashMap<Integer, String[]> screen_dataz = new HashMap<Integer, String[]>();
        public final static String[][] longValues = {
                { "10", "kstc-proc", "10.10.10.10.10.", "5", "O" },
                { "11", "proc-lvk1", "12.1.2.", "4", "O" },
                { "13", "trng-lvk1", "4.6.1.", "3", "O" } };
        private static String sl, pid, tid, mval, status;
    
        public static void main(String args[]) {
            addTask();
        }
    
        public static void addTask() {
            for (int k = 0; k < longValues.length; k++) {
                screen_dataz.put(k, longValues[k]);
            }
            Set<Entry<Integer, String[]>> mapSet = screen_dataz.entrySet();
            Iterator<Entry<Integer, String[]>> mapIterator = mapSet.iterator();
            while (mapIterator.hasNext()) {
                Entry<Integer, String[]> mapEntry = mapIterator.next();
                Integer keyValue = mapEntry.getKey();
                String[] value = mapEntry.getValue();
                System.out.println(Arrays.toString(value));
            }
        }
    }
    
5
Adam Siemion

Une correction dans votre code:

Vous voudrez peut-être mettre à jour votre boucle for

comme 

 for (int k=0; k<longValues.length; k++)
    {
    screen_dataz.put(k,longValues[k]);
    }
1
Juned Ahsan

Beaucoup de choses à commenter sur ce code.

Premièrement, les arguments génériques du type paramétré sont incorrects. La carte stocke actuellement Map<Long,Object[]>. Toutefois, les objets de type Object[][] sont ajoutés à la Map. Je suppose que vous voulez entrer chaque Object[] dans une Entry distincte dans la Map.

    for (int k=0; k<longValues.length; k++)
    {
    screen_dataz.put(k,longValues[k]);
    }

Le deuxième élément à examiner est l'itération sur les entrées Map. Au lieu d'utiliser Iterator, utilisez une boucle for..each.

    for(Entry<Integer,Object[]> entry: screen_dataz.entrySet()){
       //repetitive task
    }

Résultat final

import Java.util.HashMap;
import Java.util.Iterator;
import Java.util.Map;
import Java.util.Map.Entry;
import Java.util.Set;

public class TaskList
{   

    private static HashMap<Integer, Object[]> dataz = new HashMap<Integer,Object[]>();
    private static  HashMap<Integer, Object[]> screen_dataz = new HashMap<Integer,Object[]>();
    public final static Object[][] longValues = {{"10", "kstc-proc", "10.10.10.10.10.","5","O"},{"11", "proc-lvk1", "12.1.2.","4","O"},{"13", "trng-lvk1", "4.6.1.","3","O"}};
    private static String sl,pid,tid,mval,status;

    public static void main(String args[])
    {
        addTask();
    }

    public static void addTask()
    {  
        for (int k=0; k<longValues.length; k++)
        {
        screen_dataz.put(k,longValues[k]);
        }

        for(Entry<Integer,Object[]> entry: screen_dataz.entrySet()){
            System.out.println(entry.getKey());
            for(Object obj: entry.getValue()){
                    System.out.println(obj.toString());
            }
        }
    }

}
0
Kevin Bowersox

Je pense que l’utilisation de screen_dataz.put(k,longValues[k]); dans une boucle vous aidera. Vous pouvez également utiliser un Iterator pour cela.

0
LTKD

Commencez par changer votre boucle for pour la remplir en screen_dataz comme ceci.

for (int k=0; k<longValues.length; k++)
{
    screen_dataz.put(k,longValues[k]);
}

Ensuite, apportez les modifications ci-dessous: -

String keyValue = mapEntry.getKey().toString();
String value = Arrays.asList((Object[])mapEntry.getValue()).toString();

Cela imprimera votre valeur correctement.

0
SudoRahul