从随机HashMap中减去值

时间:2018-06-10 11:58:31

标签: java hashmap iterator

这里的背景是为航空公司乘客分配膳食。

给定一个名为allMealsList的HashMap,它是从API响应中提取的,如下所示:

enter image description here

......我想随意选择一顿饭,然后将它送回去让成年乘客随便吃饭。不要担心有条件的("成人"),我在其他地方处理。

我在努力的地方是从HashMap中减少正确的值。

我的方法如下:

  public String chooseAvailableMeals(HashMap<String, Integer> allMealsList, String paxType) {

    for (Iterator<Map.Entry<String, Integer>> it = allMealsList.entrySet().iterator(); it.hasNext(); ) {

        Random generator = new Random();

        Map.Entry<String, Integer> entry = it.next();

        if (Objects.equals(paxType, "adult")) {

            Object[] meals = allMealsList.keySet().toArray();
            Object randomMeal = meals[generator.nextInt(meals.length)];

            entry.setValue(entry.getValue() - 1);
            return (String) randomMeal;
        }
    }

我在哪里:

entry.setValue(entry.getValue() - 1);

当然,不是递减随机密钥的值而是递减第一个密钥的值 - 在这种情况下&#34; BBML&#34;。

请记住,我是一个相对java的新手,所以我确信有更优雅或有效的方式来做这件事;)。先感谢您。

1 个答案:

答案 0 :(得分:1)

您不需要迭代HashMap的条目,只需通过其密钥检索相关值:

public String chooseAvailableMeals(HashMap<String, Integer> allMealsList, String paxType) {

    Random generator = new Random();

    if (Objects.equals(paxType, "adult")) {

        Object[] meals = allMealsList.keySet().toArray();
        Object randomMeal = meals[generator.nextInt(meals.length)];

        Integer value = allMealsList.get(randomMeal);
        if (value != null && value > 0) {
            allMealsList.put(randomMeal, value - 1);
        }
        return (String) randomMeal;
    }

    // you should throw some exception or return some default value here
}

P.S。最好在此方法之外创建一个Random实例,并在每次需要生成随机数时重复使用它。