Уменьшение значений из рандомизированной HashMap - PullRequest
0 голосов
/ 10 июня 2018

Контекст здесь является контекстом при распределении питания пассажирам авиакомпании.

Учитывая HashMap, называемый allMealsList, который извлекается из ответа 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 Ответ

0 голосов
/ 10 июня 2018

Вам не нужно перебирать записи в 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
}

PS было бы лучше создать один экземпляр Random снаружиэтого метода, и используйте его каждый раз, когда вам нужно сгенерировать случайное число.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...