См. Объяснение ниже:
Первая версия:
ArrayList<Tree> trees = new ArrayList<>();
for(Tree tree: trees) {
int amount = tree.calculate(tree.getLength(), tree.getLengthPrUnit());
ArrayList <Integer> amountMaterials = new ArrayList<>();
amountMaterials.add(amount);
request.setAttribute("amountMaterials", amountMaterials);
}
В этой версии кода вы каждый раз пытаетесь создать новый ArrayList
, если у вас больше Tree
объектов, то будет создано много объектов ArrayList.
request.setAttribute()
если вы поместите этот код в цикл с тем же именем атрибута amountMaterials
предыдущие значения будут переопределены новыми значениями, и, наконец, у вас будет только одно значение, и это будет последнее вычисленное значение.
Итак, первая версия не предлагается.
Вторая версия:
ArrayList<Integer> amountMaterials = null;
ArrayList<Tree> trees = new ArrayList<>();
for(Tree tree: trees){
int amount = tree.calculate(tree.getLength(), tree.getLengthPrUnit());
amountMaterials.add(amount);
}
request.setAttribute("amountMaterials", amountMaterials);
В этом случае вы создаете объект ArrayList вне цикла, поэтому он будет создавать только один экземпляр и будет иметь все значения, а request.setAttribute()
находится вне цикла, что означает, что ваши предыдущие значения не будут переопределены.
По этому объяснению теперь вы знаете, какую версию использовать;).