Подтвердить что ты не робот

Как выполнить итерацию через LinkedHashMap со списками как значения

У меня есть объявление LinkedHashMap.

LinkedHashMap<String, ArrayList<String>> test1

Моей точкой является то, как я могу перебирать эту хэш-карту. Я хочу сделать следующее: каждый ключ получает соответствующий arraylist и печатает значения arraylist один за другим против ключа.

Я пробовал это, но получаю только строку с возвратом,

String key = iterator.next().toString();  
ArrayList<String> value = (ArrayList<String> )test1.get(key)
4b9b3361

Ответ 1

for (Map.Entry<String, ArrayList<String>> entry : test1.entrySet()) {
    String key = entry.getKey();
    ArrayList<String> value = entry.getValue();
    // now work with key and value...
}

Кстати, вы действительно должны объявлять свои переменные как тип интерфейса, например Map<String, List<String>>.

Ответ 2

Я предполагаю, что у вас есть опечатка в вашем заявлении get и что это должен быть test1.get(ключ). Если это так, я не уверен, почему он не возвращает ArrayList, если вы не вставляете правильный тип на карте в первую очередь.

Это должно работать:

// populate the map
Map<String, List<String>> test1 = new LinkedHashMap<String, List<String>>();
test1.put("key1", new ArrayList<String>());
test1.put("key2", new ArrayList<String>());

// loop over the set using an entry set
for( Map.Entry<String,List<String>> entry : test1.entrySet()){
  String key = entry.getKey();
  List<String>value = entry.getValue();
  // ...
}

или вы можете использовать

// second alternative - loop over the keys and get the value per key
for( String key : test1.keySet() ){
  List<String>value = test1.get(key);
  // ...
}

Вы должны использовать имена интерфейсов при объявлении своих варов (и в ваших общих параметрах), если у вас нет особых причин, по которым вы определяете использование реализации.

Ответ 3

// iterate over the map
for(Entry<String, ArrayList<String>> entry : test1.entrySet()){
    // iterate over each entry
    for(String item : entry.getValue()){
        // print the map key with each value in the ArrayList
        System.out.println(entry.getKey() + ": " + item);
    }
}

Ответ 4

Вы можете использовать набор записей и перебирать записи, которые позволяют вам напрямую обращаться к клавишам и значению.

for (Entry<String, ArrayList<String>> entry : test1.entrySet() {
     System.out.println(entry.getKey() + "/" + entry.getValue());
}

Я пробовал это, но получаю только возвращаемую строку

Почему вы так думаете? Метод get возвращает тип E, для которого был выбран параметр типового типа, в вашем случае ArrayList<String>.

Ответ 5

В Java 8:

Map<String, List<String>> test1 = new LinkedHashMap<String, List<String>>();
test1.forEach((key,value) -> {
    System.out.println(key + " -> " + value);
});