这里的背景是为航空公司乘客分配膳食。
给定一个名为allMealsList的HashMap,它是从API响应中提取的,如下所示:
......我想随意选择一顿饭,然后将它送回去让成年乘客随便吃饭。不要担心有条件的("成人"),我在其他地方处理。
我在努力的地方是从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的新手,所以我确信有更优雅或有效的方式来做这件事;)。先感谢您。
答案 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
实例,并在每次需要生成随机数时重复使用它。