有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java从随机哈希映射中递减值

这里的上下文是指为航空公司乘客分配膳食的上下文

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

enter image description here

。。。我想随机选择一顿饭,然后退回,这样一个成年乘客就可以随意吃一顿。不要担心有条件的if(“成人”),我在别处处理这个问题

我正在努力减少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);

当然,它不是递减随机键的值,而是递减第一个键的值——在本例中为“BBML”

请记住,我是一个相对的java新手,因此我确信有一种更优雅或更有效的方法来实现这一点;)。先谢谢你


共 (1) 个答案

  1. # 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
    }
    

    另外,最好在这个方法之外创建一个Random实例,并在每次需要生成随机数时重新使用它