如何在foreach keySet()中获取两个不同的键?

时间:2018-12-21 19:11:53

标签: java

我想打印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));
}

2 个答案:

答案 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());
}