我想打印HashMap“ allDishes”的键。 此HashMap包含一个Dish作为值。 Dish类具有一个名为“ Ingredients”的HashMap字段。
我要打印“ allDishes”的键及其HashMap“ Ingredients”的键。
使用foreach keySet(), 配料的关键是“空”, 因为在“ Ingredient”中没有值,就像在“ allDishes”中一样。 完全可以打印不同HashMap的键吗?
Map<String, Dish> allDishes = (Map<String, Dish>) application.getAttribute("allDishesHashMap");
for (String key : allDishes.keySet()) {
Map <String, String> Ingredient = allDishes.get(key).getIngredients();
out.println("<li><b>" + key + "</b> with: </li>" + Ingredient.get(key));
}
答案 0 :(得分:1)
您做错了。
当前, 您正在遍历allDishes HashMap的键。 您想要做的是遍历allDishes HashMap和 对于allDishes HashMap中的每个键, 遍历allDishes HashMap当前菜盘中包含的Ingredient HashMap的键。
为此, 首先遍历allDishes entrySet, 然后遍历每个条目的配料keySet。
以下是一些代码:
final Map<String, Dish> dishMap = (Map<String, Dish>)application.getAttribute("allDishesHashMap");
for (final Map.Entry dishEntry: dishMap.entrySet())
{
final Map <String, String> ingredientMap = dishEntry.getIngredients();
out.println("<li><strong>" + dishEntry.getKey() + "</strong> Ingredients: <ul>");
for (final String ingredientName : ingredientMap.keySet())
{
out.println("<li>" + ingredientName + "</li>")
}
out.println("</ul></li>");
}
答案 1 :(得分:0)
您可以使用嵌套循环和空检查来打印它们。
Map<String, Dish> allDishes = (Map<String, Dish>)
application.getAttribute("allDishesHashMap");
for (String dishKey : allDishes.keySet()) {
Map <String, String> ingredients = allDishes.get(dishKey).getIngredients();
System.out.println("Dish Key: " + dishKey);
// check if null here, if necessary
if (ingredients == null) {
continue; // continue, or print something else. whatever you need
}
for (String ingredient : ingredients.keySet()) {
System.out.println("Ingredient Key: " + ingredient);
}
}
如果您不需要任何特殊格式的键集,也可以像下面一样直接打印“键集”。
Map<String, Dish> allDishes = (Map<String, Dish>)
application.getAttribute("allDishesHashMap");
for (String key : allDishes.keySet()) {
Map <String, String> ingredients = allDishes.get(key).getIngredients();
System.out.println("Dish Key: " + key);
// check if null here, if necessary
if (ingredients == null) {
continue; // continue, or print something else. whatever you need
}
System.out.println("Ingredients KeySet: " + ingredients.keySet());
}