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);
}
}
}
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();
}
Votre code avec quelques corrections/améliorations:
screen_dataz
ajoutait toujours le même objetla 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));
}
}
}
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]);
}
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());
}
}
}
}
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.
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.