2012-02-21 7 views
11

javaの辞書のすべての項目を調べたい私が何をしたいのか明確にするために、これはC#のコード辞書のJavaのforeachループ

Dictionary<string, Label> LableList = new Dictionary<string, Label>(); 
foreach (KeyValuePair<string, Label> z in LabelList); 

である私はこれを行う方法がわからないのjavaで、例えば私は、この

for(Object z: dic) 

をしましたが、それはそれは反復可能ではないと言います。助言してください......

答えて

31

私はあなたがMap<String, Label>をJavaの組み込み辞書構造であると仮定しています。 Javaでは、Mapを直接反復することはできません(つまり、Iterableが実装されていません)。これは、実際に反復処理しているものがあいまいであるためです。

これは、キー、値、またはエントリ(両方)を反復処理することを選択するだけの問題です。

Map<String, Label> map = new HashMap<String, Label>(); 
//... 

for (String key : map.keySet()) { 
} 

for (Label value : map.values()) { 
} 

for (Map.Entry<String, Label> entry : map.entrySet()) { 
    String key = entry.getKey(); 
    Label value = entry.getValue(); 
} 

C#コードは、エントリ(最後の例)を反復するのと同じようです。

+0

これは私がそれを定義する方法です: Dictionary dic = null; 地図についてはわかりません...辞書のようなものですか? – Daniel

+3

@Daniel javadocを読むと '注意:このクラスは時代遅れです。新しい実装では、このクラスを拡張するのではなく、Mapインターフェイスを実装する必要があるため、新しいマップクラスの1つを使用する必要があります。あなたはおそらく 'HashMap'を望んでいるでしょう - iterableが動作するために必要な新しい関数を実装しています – Voo

+1

驚くべきことに、Hashtableには辞書のスーパークラスがあったことを忘れていました。 –

0

あなたの最善の策は、これを使用することです:

しかし、より良い賭けあなたは、例えば、.NETでなく、地図のサブクラスのいずれかを使用する場合と同じように辞書を使用しないことであるJavaでは
for (String key : LableList.keys()) { 
    Label value = LableList.get(key); 

    // do what you wish with key and value here 
} 

HashMap。

for (Entry<String, Label> e : myMap.entrySet()) { 
    // Do what you wish with e.getKey() and e.getValue() 
} 

また、公式のjavadocでDictionaryを使用しないことをお勧めします。

+1

Dictionary。keys()はIterableを実装していないforeumループでは使用できないEnumerationを返します。あなたのコードはコンパイルされません。 – Philipp

+0

それを私の作業コードに伝えてください:) –

+0

Eclipseコンパイラが壊れていて(ショーとエラー)、同じことを話しているわけでもありません。 (その辞書は決して重要ではありません) – Philipp

3

java.util.Mapは辞書equvivalentであり、以下に、あなたは私が別のHashMapの(B)に1つのHashMapの(A)の内容を追加しようとしていた

for(Map.Entry<K, V> e : map.entrySet()) 
{ 
    System.out.println(e.getKey()+": "+e.getValue()); 
} 
0

各エントリを反復処理する方法の一例です。 「 - >」

a.forEach((k, v) -> b.put(k, v)); 

あなたは、あなたが他の側にしたい、これまで何をして私の例を操作することができます。

は、私はそれは、単純なHashMapのこのようを反復処理することが判明しました。

これはラムダ式であり、これが動作するにはJava 1.8(Java 8)以降を使用する必要があることに注意してください。 :-)