Device が Device という名前のクラスのインスタンスである場所を使用するカスタム マップがあります。
devices = new HashMap<String, Device>();
StackOverflow で提案されたいくつかのイテレータと for ループを試しましたが、それらはすべてエラーを生成するようで、その理由はわかりません。
エラーの例:
と
の宣言devices
が間違っているようです。そのはず:
Map<String, Device> devices;
生の (「消去された」) タイプではありませんMap
。最新のコンパイラは、未加工の型を使用する場合に警告を表示する必要があります。コンパイラの警告に注意してください。
最初のシナリオでは、あなたはただ与える
for(Map.Entry entry:devices.entrySet()){}
十分であり、そこにMap.Entry(String、Device)をキャストする必要はありません。2番目のシナリオでは、エントリから値を取得すると、オブジェクト値が返されるため、特定のインスタンスにキャストする必要があります。
デバイスdevice=(デバイス)pairs.getValue()
これを試すことができますか:
HashMap<String, Device> devices = new HashMap<String, Device>();
// do stuff to load devices
Device currentDevice;
for (String key : devices.keySet()) {
currentDevice = devices.get(key);
// do stuff with current device
}
マップを反復処理するには 3 つの方法があります。1) For-Each ループを使用してエントリを反復処理します。2) For-Each ループを使用してキーまたは値を繰り返します。3) Iterator を使用した反復処理。(これについては、ジェネリックを使用して、またはジェネリックなしで反復できます)
Map map = new HashMap();
Iterator entries = map.entrySet().iterator();
while (entries.hasNext()) {
Map.Entry entry = (Map.Entry) entries.next();
Integer key = (Integer)entry.getKey();
Integer value = (Integer)entry.getValue();
System.out.println("Key = " + key + ", Value = " + value);
}