Как перебрать LinkedHashMap со списками значений
у меня есть следующее объявление LinkedHashMap.
LinkedHashMap<String, ArrayList<String>> test1
моя точка зрения заключается в том, как я могу перебрать этот хэш-карте. Я хочу сделать это следующим образом, для каждого ключа получите соответствующий arraylist и распечатайте значения arraylist один за другим против ключа.
Я пробовал это, но get возвращает только строку
String key = iterator.next().toString();
ArrayList<String> value = (ArrayList<String> )test1.get(key)
5 ответов
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>>
.
Я предполагаю, что у вас есть опечатка в вашем заявлении get и что это должен быть test1.получить (ключ). Если это так, я не уверен, почему он не возвращает 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);
// ...
}
вы должны использовать имена интерфейса при объявлении ваших vars (и в ваших общих параметрах), если у вас нет очень конкретной причины, по которой вы определяете использование реализация.
// iterate over the map
for(Entry<String, ArrayList<String>> entry : test1.entrySet()){
// iterate over each entry
for(String item : entry.getValue()){
// print the map's key with each value in the ArrayList
System.out.println(entry.getKey() + ": " + item);
}
}
вы можете использовать набор записей и перебирать записи, что позволяет получить доступ как к ключу, так и к значению напрямую.
for (Entry<String, ArrayList<String>> entry : test1.entrySet() {
System.out.println(entry.getKey() + "/" + entry.getValue());
}
Я пробовал это, но получить только возвращает строку
Почему вы так думаете? Метод get
возвращает значение типа E
для которого был выбран параметр универсального типа, в вашем случае ArrayList<String>
.
В Java 8:
Map<String, List<String>> test1 = new LinkedHashMap<String, List<String>>();
test1.forEach((key,value) -> {
System.out.println(key + " -> " + value);
});