2015-05-01 4 views
-2

Не знаете, как сформулировать этот вопрос. У меня есть фиктивный код для упражнений bootcamp/training. У меня есть список хеш-карт, которые я хочу установить в этом цикле, когда он проходит через ингредиенты. Код работает без ошибок, однако все ингредиенты в списке хеш-карт всегда устанавливаются на последний. Кажется, что каждый из них написан поверх предыдущего. Вот мой код:Логический список ошибок HashMap?

List<Map<String,String>> returner= new ArrayList<Map<String,String>>(); 
     Map<String,String> resultant = new HashMap<String,String>(); 
     for (Ingredient current : webIngredients) {//loop through each ingredient in list of ingredients 
      resultant.put("Ingredient", current.getIngredientName()); 
      resultant.put("Quantity", current.getQuantity()); 
      resultant.put("Unit", current.getMeasureType()); 
      recipe.getFields().add(resultant);//using a recipe. Not used in test 
      returner.add(resultant);//add first hashmap to the list 
     }//end for: loop through records (file lines) 

Поэтому в основном я хочу прочитать в ингредиентах от объекта ингредиента, который имеет три свойства, ingredientname, количество и единицы (измерения). Так что, если я дам ему салат, 2, ломтик и помидор, 1, кусочек, то я должен получить список с картами. Ингредиент: салат Количество: 2 Единица: срез, ингредиент: томатный объем: 1 единица: срез

+0

Я переместил объявление карты внутри цикла for, и проблема все еще сохраняется. Что еще может быть причиной этого? –

+0

Моя ошибка: вы правы, проблема была в ошибке памяти на сервере веб-логики. Я также развертывал веб-сервис. Извините и спасибо, что нашли время, чтобы попытаться помочь мне. Я думаю, я заслужил -2s ... –

ответ

0

Вы инициализирован Map<String,String> resultant = new HashMap<String,String>(); вне для цикла;

Когда в первый раз для запуска цикла карты заполняются определенными значениями.

Когда цикл выполняется во второй раз, значения объекта карты становятся переопределенными, потому что это тот же объект карты в куче. Вот почему он берет последнее значение;

просто положил Map<String,String> resultant = new HashMap<String,String>(); внутри цикла for, поэтому каждый раз, когда создается новый объект карты.

+0

старый не будет собирать мусор (и не хотел бы, чтобы он был) - он указан в списках – CupawnTae

+0

. Выбранная проблема будет решена благодаря этому, моя проблема заключалась в развертывании службы. Сожалею! –

1

Потому что вы, re только создание единственной карты, вы переписывая детали каждый раз. Вам нужно создать новую карту каждый раз внутри цикла:

List<Map<String,String>> returner= new ArrayList<Map<String,String>>(); 
    for (Ingredient current : webIngredients) {//loop through each ingredient in list of ingredients 
     // create a map for this ingredient 
     Map<String,String> resultant = new HashMap<String,String>(); 

     resultant.put("Ingredient", current.getIngredientName()); 
     resultant.put("Quantity", current.getQuantity()); 
     resultant.put("Unit", current.getMeasureType()); 
     recipe.getFields().add(resultant);//using a recipe. Not used in test 
     returner.add(resultant);//add this hashmap to the list 
    }//end for: loop through records (file lines) 
+0

Извините, проблема связана с развертыванием веб-сервисов на моем конце. –

Смежные вопросы