Цикл forach в java для словаря

Я хочу просмотреть все элементы в словаре в java. чтобы уточнить, что я хочу сделать, это код С#

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

Я не знаю, как это сделать, это java, например, я сделал это

for(Object z: dic)

но он говорит, что он не является итерируемым. Пожалуйста, посоветуйте......

Ответ 1

Я предполагаю, что у вас есть 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();
}

Ваш код на С# кажется таким же, как итерация над записями (последний пример).

Ответ 2

java.util.Map является эквивалентом словаря, а ниже приведен пример того, как вы можете выполнять итерацию через каждую запись

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

Ответ 3

Лучше всего использовать это:

for (String key : LableList.keys()) {
    Label value = LableList.get(key);

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

В Java, однако, лучше не использовать словарь, как в .NET, но использовать один из подклассов Map, например. HashMap. Вы можете выполнить итерацию по одному из следующих значений:

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

Вам также рекомендуется использовать словарь в официальном javadoc.

Ответ 4

Я пытался добавить содержимое одной HashMap (a) в другую HashMap (b).

Мне было легко пропустить итерацию через HashMap таким образом:

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

Вы можете манипулировать моим примером, чтобы делать то, что захотите, с другой стороны "- > ".

Обратите внимание, что это выражение Lambda, и для этого вам придется использовать Java 1.8 (Java 8) или более позднюю версию.: -)