オブジェクトを介してハッシュマップに値を挿入しようとしていますが、値がハッシュマップに挿入されているかどうかを確認したいと思います。したがって、このコードを使用していますが、実行時に出力を取得できません。
これを解決する方法は?
コード:
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);
}
}
}
まず、マトリックス全体ではなく、longValues
マトリックスの行をマップに追加する必要があります。
for (int k=0; k<longValues.length; k++)
{
screen_dataz.put(k,longValues[k]);
}
次に、反復中に、値をString
ではなくObject[]
として抽出し、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();
}
いくつかの修正/改善を加えたコード:
screen_dataz
_に要素を追加するループは、常に同じオブジェクトを追加していましたマップに格納されている値は配列であるため、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));
}
}
}
_
コードの1つの修正:
Forループを更新することをお勧めします
なので
for (int k=0; k<longValues.length; k++)
{
screen_dataz.put(k,longValues[k]);
}
このコードについてコメントすることがかなりあります。
まず、パラメーター化された型の一般的な引数が正しくありません。マップは現在Map<Long,Object[]>
を格納していますが、タイプObject[][]
のオブジェクトがMap
に追加されています。各Object[]
を個別のEntry
としてMap
に入力するとします。
for (int k=0; k<longValues.length; k++)
{
screen_dataz.put(k,longValues[k]);
}
2番目に確認するのは、Map
エントリの反復です。 Iterator
を使用する代わりに、for..each
ループを使用します。
for(Entry<Integer,Object[]> entry: screen_dataz.entrySet()){
//repetitive task
}
最終出力
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());
}
}
}
}
ループでscreen_dataz.put(k,longValues[k]);
を使用すると役立つと思います。これにはイテレータを使用することもできます。
まず、for
ループを変更して、次のようにscreen_dataz
に入力します。
for (int k=0; k<longValues.length; k++)
{
screen_dataz.put(k,longValues[k]);
}
次に、以下の変更を行います。-
String keyValue = mapEntry.getKey().toString();
String value = Arrays.asList((Object[])mapEntry.getValue()).toString();
これにより、値が正しく出力されます。